树的子结构

树的子结构

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

java代码,注释很清晰。
基本思路就是遍历大树,找到与子结构跟节点相同的节点,然后传入判断函数进行遍历比较
public class Solution {
    //遍历大树
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1 == null || root2 == null){
            return false;
        }
        //如果找到与子树相同根的值,走判断方法
        if(root1.val == root2.val){
            if(judge(root1,root2)){
                return true;
            }
        }
        //遍历左孩子,右孩子
        return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
    }
    
    //判断是否是子结构
    public boolean judge(TreeNode root, TreeNode subtree) {
        //子结构已经循环完毕,代表全部匹配
        if(subtree == null){
            return true;
        }
        //大树已经循环完毕,并未成功匹配
        if(root == null){
            return false;
        }
        //相等后判断左右孩子
        if(root.val == subtree.val){
            return judge(root.left, subtree.left) && judge(root.right, subtree.right);
        }
        return false;
    }
}



全部评论
同学注释那里我觉得应该是判断是否为子结构,而不是子树,这两个概念好像不一样
2 回复 分享
发布于 2019-09-13 09:31
if语句可以直接 if(root1.val == root2.val && judge(root1,root2)) return ture;
2 回复 分享
发布于 2020-05-22 15:25
不明白为什么jugde循环之后,最后要返回False
点赞 回复 分享
发布于 2020-03-04 15:53

相关推荐

SinyWu:七院电话面的时候问我有没有女朋友,一听异地说你赶紧分。我:???
点赞 评论 收藏
分享
杨柳哥:这不是普通人,那这个钱的是天才
点赞 评论 收藏
分享
80 8 评论
分享
牛客网
牛客企业服务