剑指Offer - 树的子结构(JAVA实现)

题目描述:

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

思路分析:
如果两个树中任意一棵树为空,则返回false;
判断A树中是否包含B树,且头结点相同,如果包含则返回true,如果不包含则遍历A树的左右两个子树,并将结果返回。所以本题需要调用递归。

代码实现如下:

public class Solution {
    public boolean HasSubtree(TreeNode root1, TreeNode root2) {
    if( root2 == null || root1 == null) 
        return false;
    if( root1ContainsRoot2(root1,root2) ){
        return true;
    }else{
        return HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
    }
}

    private boolean root1ContainsRoot2(TreeNode root1,TreeNode root2){
        if(root2 == null ) return true;//若b树已经遍历完成还没有报错,则a树包含b树,返回true。
        if(root1 == null) return false;
        if(root1.val == root2.val){
            return root1ContainsRoot2(root1.left,root2.left) && root1ContainsRoot2(root1.right,root2.right);
        }else
            return false;
}
}

猜你喜欢

转载自blog.csdn.net/justlikeu777/article/details/84501114