题解 | #树的子结构#

树的子结构

http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88

class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        //这个函数是指当前root1的根与root2的根
        //找到root1里的根节点与root2相同的值
        if (root1==null||root2==null){
            return false;
        }
        if (root1.val==root2.val&&(helper(root1.left,root2.left))&&(helper(root1.right,root2.right))){
            //当前这个根就是相同的,看各自左右是否能对应
            return true;
        }else {
            //如果不对应,换根
            return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
        }
    }
    public boolean helper(TreeNode root1,TreeNode root2){
        //判断两个数是否是相同的
        //注意!!!判断空的顺序非常重要
        if (root2==null){
            return true;
        }
        if (root1==null) {
            return false;
        }
        if (root1.val==root2.val){
            return helper(root1.left,root2.left)&&helper(root1.right,root2.right);
        }else {
            return false;
        }

    }

}

先找A中的根与B根对应 然后在看对应的左右子树是否对应
在判断左右子树是否对应当中要注意 先判断b是否为空 如果b为空那么一定是子节点 因为上一层已经判断了根是相同了的

在helper中如果进来的节点值相同那么一次看左右对应的是不是相同的

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务