目录
1. 检查两颗树是否相同
1.1题目描述
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
1.2思考过程

1.3代码
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null){
return true;
}
if((p==null&&q!=null)||(p!=null&&q==null)){
return false;
}
if(p.val!=q.val){
return false;
}
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
}
首先这两个数的根节点都是空,就是相同的,返回true,如果一个空,另一个不为空,就说明不是,返回false,接着我们判断他两的值是否相等,不相等我们返回false,到这里,说明他们纸箱等,接着要判断他两的孩子节点是否相同,都相同就返回true,负责返回false,这里用递归来完成。
2. 另一颗树的子树
2.1题目描述
给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。
二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。
2.2思考过程

2.3代码
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(root==null||subRoot==null){
return false;
}
if(isSameTree(root,subRoot)){
return true;
}
return isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
}
private boolean isSameTree(TreeNode p, TreeNode q) {
if(p==null&&q==null){
return true;
}
if((p==null&&q!=null)||(p!=null&&q==null)){
return false;
}
if(p.val!=q.val){
return false;
}
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
}
由于要判断树是否相同,我们可以调用刚写的代码来完成,首先判断两个数是否有空的,有就说明不是,返回false,接着判断这两个树是否相同,相同就说明是,返回true,最后判断他们的子树是否与目标树相同,有一个相同就说明是子树,返回true。
3. 二叉树最大深度
3.1题目描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。

本文详细讲解了如何检查两棵树是否相同,判断子树是否存在,计算最大深度,识别平衡二叉树,以及验证对称性。通过递归和层次遍历方法,提供了实用的代码示例和算法思路。
最低0.47元/天 解锁文章
176万+

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



