初阶数据结构二叉树练习系列(1)

这个系列的文章将带大家一起刷题,并且总结思路

温馨提示:本篇文章里的练习题仅适合刚学完二叉树的小白使用

相同的树

思路

情况分析:第一种情况:两棵树都为空 → 返回true

第二种情况:一棵树为空,另一棵树不为空→ 返回false

第三种情况: 两棵树都不为空 → 判断每个节点的数值是否相同

源代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {

if(q == NULL && p == NULL)

return true;

if(q == NULL || p == NULL)

return false;

if(p->val != q->val)

return false;

return isSameTree(q->left, p->left) && isSameTree(q->right, p->right);

}

变式题

思路上与第一题的一模一样,但不同的是这次需要遍历树的左右叶子,并且判断是否处在相反的位置

思路

情况分析:第一种情况:两棵树都为空 → 返回true

第二种情况:一棵树为空,另一棵树不为空→ 返回false

第三种情况: 两棵树都不为空 → 判断每个节点的数值是否相同

源代码

bool _isSymmetric(struct TreeNode* p, struct TreeNode* q)

{

if(q == NULL && p == NULL)

return true;

if(q == NULL || p == NULL)

return false;

if( q->val != p->val)

return false;

return _isSymmetric(q->left, p->right) && _isSymmetric(q->right, p->left);

}

bool isSymmetric(struct TreeNode* root) {

return _isSymmetric(root->left, root->right);

}

另一棵树的子树

思路

另一棵树的子树

第二种情况: root为空时, 则没有子树可与还在等待比较的树进行比较,因此返回false

第三种情况:root不为空,则先比较根节点的值是否相等,比较完根的节点后,再比较叶子的节点的数值是否相等

源代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {

if(q == NULL && p == NULL)

return true;

if(q == NULL || p == NULL)

return false;

if(p->val != q->val)

return false;

return isSameTree(q->left, p->left) && isSameTree(q->right, p->right);

}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){

if(root == NULL)

return false;

if(root->val == subRoot->val && isSameTree(root, subRoot))

return true;

return isSubtree(root->left, subRoot) || isSubtree(root->right,subRoot);

}

刷题总结

从本篇文章中的三道习题以及我自己的刷题中发现,类似于这种类型的题不管考察的是否为二叉树也好还是链表也好,我们都需要考虑它是否为空以及为空时是否可取

好的,本篇文章就先带大家刷到这里,还请各位观众老爷赏个三连,谢谢啦

相关推荐
风一样的航哥3 小时前
LeetCode 2615 等值距离和:前缀和优化O(n)解法深度解析
数据结构·算法·leetcode
khalil10205 小时前
代码随想录算法训练营Day-34动态规划03 | 01背包问题 二维、01背包问题 一维、416. 分割等和子集
数据结构·c++·算法·leetcode·动态规划·背包问题·01背包
空中海6 小时前
Redis 从零到精通:9大数据结构 × 11个高频工程实战场景完全手册
数据结构·数据库·redis
地球资源数据云7 小时前
1951-2025年中国逐年1千米逐月总降水量区域统计数据集_年表_县
大数据·数据结构·数据库·数据仓库·人工智能
cpp_25018 小时前
P2639 [USACO09OCT] Bessie‘s Weight Problem G
数据结构·算法·动态规划·题解·洛谷·背包dp
郝学胜-神的一滴8 小时前
[力扣 227] 双栈妙解表达式计算:从思维逻辑到C++实战,吃透反向波兰式底层原理
java·前端·数据结构·c++·算法
菜鸟丁小真9 小时前
LeetCode hot100 -131.分割回文串
数据结构·算法·leetcode·知识点总结
数智化精益手记局9 小时前
8d报告案例分析:拆解8d报告案例分析的8个步骤,解决生产现场重复发生的质量难题
大数据·数据结构·数据库·人工智能·精益工程
笨笨饿9 小时前
66_C语言与微控制器底层开发
linux·c语言·网络·数据结构·算法·机器人·个人开发
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题】【Java基础篇】第10题:HashMap中的元素是有序存放的吗
java·开发语言·数据结构·后端·面试·哈希算法·哈希表