题解 | #树的子结构#

树的子结构

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中如果进来的节点值相同那么一次看左右对应的是不是相同的

全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务