另一棵树的子树
- 题目
- 思路
- 代码
题目
思路
这道题目主要用到判断两个二叉树是否相同 对root为根节点的树进行递归遍历判断 是否存在一颗子树和以subRoot为根节点的树
代码
class Solution {
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(root == null){
return false;
}
if(isSameTree(root,subRoot)){
return true;
}//两棵树相同 互为子树
if(isSubtree(root.left,subRoot)){
return true;
}//判断root的左子树是否和subRoot相同
if(isSubtree(root.right,subRoot)){
return true;
}//判断root的右子树是否和subRoot相同
return false;
}
//判断两棵二叉树是否相等
public boolean isSameTree(TreeNode root1, TreeNode root2){
if(root1 == null && root2!= null || root1 != null && root2 == null){
return false;
}//如果一棵树为空 一棵树不为空 则返回false
if(root1 == null && root2 == null){
return true;
}//两棵树都为空返回true
//执行下面这段代码表示 root1和root2都不为空
//所以在判断是不用担心空指针异常
if(root1.val != root2.val){
return false;
//值不相同返回false
}
//递归判断这两棵树的左子树和右子树是否相同
return isSameTree(root1.left,root2.left) && isSameTree(root1.right,root2.right);
}
}