剑指offer算法题:树的子结构HasSubtree

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

public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        boolean result = false;
        if(root1 != null && root2 != null) {
            if(root1.val == root2.val) 
                result = DoseAHasB(root1,root2);//判断A、B子结构
            if(!result)
                result = HasSubtree(root1.left,root2);//继续判断下面的节点
            if(!result)
                result = HasSubtree(root1.right,root2);//继续判断下面的节点
        }
        return result;
    }
    private boolean DoseAHasB(TreeNode root1,TreeNode root2) {
        if(root2 == null)//说明B子树的结构都判断完并都与A相等
            return true;
        if(root1 == null)//B还没判断完A就结束了
            return false;
        if(root1.val != root2.val)
            return false;
        return DoseAHasB(root1.left,root2.left) && DoseAHasB(root1.right,root2.right);
    }
发布了239 篇原创文章 · 获赞 70 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43777983/article/details/104173927
今日推荐