樹的子結構_17

題目描述

輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

思路

第一步:在樹A中找到和樹B的節點一樣的節點R
第二部:判斷樹A以R爲根節點的子樹是不是包含樹B一樣的結構

package tree;
/*
樹的子結構
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
 */
public class HasSubtree_17 {
    //遍歷大樹
    public boolean HasSubtree(TreeNode_17 root1,TreeNode_17 root2) {
        if (root1 == null || root2 == null) {
            return false;
        }

        //如果找到與子樹相同根的值,走判斷方法
        if (root1.val == root2.val) {
            if (judge(root1, root2)) {
                return true;
            }
        }

        //遍歷左孩子,右孩子
        return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
    }

    //判斷是否是子結構
    public boolean judge(TreeNode_17 root, TreeNode_17 subtree) {
        //子結構已經循環完畢,代表全部匹配
        if(subtree == null){
            return true;
        }

        //大樹已經循環完畢,並未成功匹配
        if (root == null) {
            return false;
        }

        //相等後判斷左右孩子
        if (root.val == subtree.val) {
            return judge(root.left, subtree.left) && judge(root.right, root.right);
        }
        return false;
    }
}

 

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