《劍指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);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章