《剑指offer》第18题 树的子结构(Java版答案)

题目:

输入两颗二叉树A和B,判断B是不是A的子结构。

答案:

递归

第一步,在树1中找到和树2的根结点的值一样的结点R

第二步,判断树1中以R为根结点的子树是不是包含和树2一样的结构。

public boolean isSubTree(TreeNode root1, TreeNode root2) {
        if (root1 == null) {
            return false;
        }

        if (root2 == null) {
            return true;
        }

        boolean result = false;

        if (root1.value == root2.value) {
            result =  doesTree1HasTree2(root1, root2);
        }

        if (!result) {
            result = isSubTree(root1.left, root2);
        }

        if (!result) {
            result = isSubTree(root1.right, root2);
        }

        return result;
    }

    private boolean doesTree1HasTree2(TreeNode root1, TreeNode root2) {
        if (root1 == null) {
            return false;
        }

        if (root2 == null) {
            return true;
        }

        if (root1.value != root2.value) {
            return false;
        }

        return doesTree1HasTree2(root1.left, root2.left) && doesTree1HasTree2(root1.right, root2.right);
    }

 

你可能感兴趣的:(算法,剑指offer)