题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
遍历树A,当A的节点值等于B,则进入是否是子树的判断,如果不等于继续遍历。
要注意的点:
1.如果节点A的值等于节点B,并且子树判断返回为false,不代表B就不是A的子树了,还需要继续向后找节点。
2.在判断B是否为A子树sameTree方法中,退回的条件t2==null,则return true,t1==null,则return false,要注意这里。
3.对于ifson的判断,如果前面为true了,不需要继续向后判断。
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1==null||root2==null){
return false;
}
boolean ifson = false;
if(root1.val==root2.val){
ifson = sameTree(root1,root2);
}
if(!ifson){
ifson = HasSubtree(root1.left,root2);
}
if(!ifson){
ifson = HasSubtree(root1.right,root2);
}
return ifson;
}
public boolean sameTree(TreeNode t1,TreeNode t2){
if(t2==null){
return true;
}else if(t1==null){
return false;
}
else if(t1.val!=t2.val){
return false;
}
return sameTree(t1.left,t2.left)&&sameTree(t1.right,t2.right);
}
}