注意本题要跟树的子结构区分开
Given tree A:
3
/ \
4 5
/ \
1 2
/
0
Given tree B:
4
/ \
1 2
//树的子结构 Return true. (结构即可)
//子树问题 return false(树才行)
. Subtree of Another Tree
Given two non-empty binary trees s and t, check whether tree A has
exactly the same structure and node values with a subtree of B.
A subtree of s is a tree consists of a node in A and all of this node's
descendants. The tree A could also be considered as a subtree of itself.
Example 1:
Given treeA:
3
/ \
4 5
/ \
1 2
Given tree B:
4
/ \
1 2
Return true
Example 2:
Given tree A:
3
/ \
4 5
/ \
1 2
/
0
Given tree B:
4
/ \
1 2
Return false.
- 看两个树是不是一样,然后再以两个子树为根节点
- 为什么第2、3个要用主函数,因为如果两颗子树不相等,还要去下一级子树里面找,用子函数的话就直接截止了
- 递归的出口:root==null
class Solution {
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if(root==null){
return false;//递归的终点,到最后也没发现匹配的 ,直接返回
}
return issame(root,subRoot)||isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
}
//判断两个树是不是相同,//仿镜像二叉树
boolean issame(TreeNode root1,TreeNode root2){
if(root1==null&&root2==null){
return true;
}
if(root1==null||root2==null){
return false;
}
if(root1.val!=root2.val){
return false;
}
//这一句跟镜像二叉树不同
return issame(root1.left,root2.left)&&issame(root1.right,root2.right);
}
}