剑指offer-17-树的子结构

树的子结构

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

思路:

  • 递归

踩坑

本题测试用例较少,只要比较root1及其左右子树 就能ac

代码

能AC但是错误的代码

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1==null || root2==null){
            return false;}
        //这里只比较了root,root.left,root.right
        return JudgeNode(root1,root2)||JudgeNode(root1.left,root2)||JudgeNode(root1.right,root2);         
        }
    public boolean JudgeNode(TreeNode Node1,TreeNode Node2){
        if(Node2==null){return true;}
        if(Node1==null){return false;} //包含了隐含条件 Node2!=null

        if(Node1.val==Node2.val){
            return JudgeNode(Node1.left,Node2.left) && JudgeNode(Node1.right,Node2.right);
            }else{return false;}
    }
}

正确的代码

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root2==null ||root1==null){return false;}
        if(root1.val==root2.val && judge(root1,root2)){
             return true;
        }else { //递归调用 判断子树是否与root相等
            return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
        }
    }

    public boolean judge(TreeNode root1,TreeNode root2){
        if(root2==null){return true;}
        if(root1==null){return false;}
        if(root1.val==root2.val){ 
                return judge(root1.left,root2.left) && judge(root1.right,root2.right);
        }else{
                return false;
             }
        }

}
剑指offer与数据结构 文章被收录于专栏

本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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