目录
1、单值二叉树
- 链接直达:
- 题目:
- 思路: 递归 + 分治
单值二叉树,顾名思义,就是说所有节点的值val是相同的,这里我们采用分治的思想。具体操作过程是将每个节点都去和根节点比较,如果存在不等,就返回false。如果每个根和其左右孩子都相等,那么我们就可以断定此二叉树必是单值二叉树,因为根节点也会成为孩子,孩子也会成为根结点。而上述操作均是建立在递归+分治的基础上完成的。
- 代码如下:
bool isUnivalTree(struct TreeNode* root) { if (root == NULL) { return true; //如果为空树,同样符合单值,直接返回true } if (root->left && root->left->val != root->val) { return false;//如果左孩子存在并且左孩子和根结点不同,返回false } if (root->right && root->right->val != root->val) { return false;//如果右孩子存在并且右孩子和根结点不同,返回false } return isUnivalTree(root->left) && isUnivalTree(root->right);//递归+分治,转化子问题 }
2、检查两棵树是否相同
- 链接直达:
- 题目:
- 思路:分治+递归
首先得看清题目需求,两颗相同的树,而不是对称的树,相同的树就说明其对应节点的值val应均相等。要先排除些特殊情况,如若两棵树的根节点均为空,那么符合题意,如若有任何一棵树先为空,那么同样不符合,其次就是判断节点值是否相等,最后就是最基本的递归(递归左子树和右子树)+分治即可解决此问题。
- 代码演示:
bool isSameTree(struct TreeNode* p, struct TreeNode* q) { //都是空树 if (p == NULL & q == NULL) { return true; //如果p和q均为NULL,成立,返回true } //一个为空,一个不为空 if (p == NULL || q == NULL) { return false; //若p和q其中一个先为空,那么不相同,返回false } //都不为空 if (p->val != q->val) { return false; //如果对应子树的值不同,同样返回false } return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);//分治+递归 }
3、对称二叉树
- 链接直达:
- 题目:
二叉树算法解析:遍历、构建与性质检验

本文详细介绍了关于二叉树的一系列经典算法,包括单值二叉树的检验、两棵树的比较、对称性的判断、翻转操作以及三种遍历方式(前序、中序、后续)。通过递归和分治策略,分别给出每种问题的解决方案,并提供了相应的代码实现,有助于理解二叉树的性质和操作。


最低0.47元/天 解锁文章
11万+

被折叠的 条评论
为什么被折叠?



