《剑指offer》:数的子结构

396 阅读1分钟

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

思路:主要思想采用的递归方法,先判定两个树的根是否相等,然后再判定root1树的左子树是否跟root2相等,不相等则判定root1的右子树是否和肉root2相等。

    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1 == null || root2 == null){
           return false;
        }
        boolean result = false;
        if(root1.val == root2.val){
            result = isboolean(root1,root2);
        }
        if(!result){
            result = isboolean(root1.left,root2);
        }
        if(!result){
            result = isboolean(root1.right,root2);
        }
        return result;
    }
    public boolean isboolean(TreeNode root1,TreeNode root2){
        if(root1 == null && root2 != null){
            return false;
        }
        if(root2 == null){
            return true;
        }
        if(root1.val != root2.val){
            return false;
        }
        return isboolean(root1.left,root2.left) && isboolean(root1.right,root2.right);
    }