2.输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

思路:注意recur方法中if(root2==null) return true;的理解,第一次调用recur的时候不会触发该条件的判断。

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        //1.定义一个标志位flag用来做判断
        boolean flag=false;
        if(root1!=null && root2!=null){
            //1.从根节点找
            flag=recur(root1,root2);
            //2.如果没找到,从根节点左子树
            if(!flag){
                flag=HasSubtree(root1.left,root2);
            }
            //3.如果以上都没找到,从右子节点
            if(!flag){
                flag=HasSubtree(root1.right,root2);
            }
        }
        return flag;
    }
    boolean recur(TreeNode root1,TreeNode root2){
        if(root2==null) return true;
        if(root1==null) return false;
        if(root1.val!=root2.val) return false;
        //以上情况都不对,说明root1.val=root2.val,我们继续向下递归判断
        return recur(root1.left,root2.left) && recur(root1.right,root2.right);
    }
}




posted @ 2021-03-05 22:44  ForMei  阅读(54)  评论(0)    收藏  举报