劍指offer17-樹的子結構

劍指offer17-樹的子結構

最近全國疫情嚴重,待在家裏沒事幹,馬上又要準備春招了,最近刷刷題,記錄一下!再說一句,武漢加油,大家出門記得戴口罩!

1、題目描述

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

2、思路

要查找樹A中是否存在和樹B結構一樣的子樹,我們可以分爲兩步:第一步,在樹A中找到和樹B的根結點值一樣的結點R;第二步,判斷樹A中以R爲根結點的子樹是不是包含和樹B一樣的結構,B樹有的子節點,A樹必須有;B樹沒有的子節點,A樹可以有。
  對於這兩步,第一步實際上就是樹的遍歷,第二步是判斷是否有相同的結構,這兩步都可以通過遞歸來實現。

3、代碼

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        /*
        1、尋找相同的根節點
     */
        if(root1==null||root2==null)
            return false;
        if(root1.val==root2.val && isContain(root1,root2))
            return true;
        return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
    }
    /*
        2、比較是否包含
     */
    public boolean isContain(TreeNode node1,TreeNode node2) {
        //我爲空,你不爲空,說明我不包含你
        if(node1==null&&node2!=null)
            return false;
        //咱兩都空,等於值相同
        if(node2==null)
            return true;
        return node1.val==node2.val && isContain(node1.left,node2.left) && isContain(node1.right,node2.right);

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