433,劍指 Offer-樹的子結構

No amount of money ever bought a second of time. 
web

再多的錢也沒法買回逝去的光陰。算法

問題描述微信



輸入兩棵二叉樹A和B,判斷B是否是A的子結構。(約定空樹不是任意一個樹的子結構)數據結構


B是A的子結構, 即A中有出現和B相同的結構和節點值。app


例如:數據結構和算法

給定的樹 A:編輯器

     3svg

    / \url

   4   5spa

  / \

 1   2

給定的樹 B:

   4 

  /

 1

返回 true,由於 B 與 A 的一個子樹擁有相同的結構和節點值。


示例 1:

輸入:A = [1,2,3], B = [3,1]

輸出:false

示例 2:

輸入:A = [3,4,5,1,2], B = [4,1]

輸出:true


限制:

0 <= 節點個數 <= 10000


問題分析



要判斷B是不是A的子結構,像下面這樣,咱們只須要從根節點開始判斷,經過遞歸的方式比較他的每個子節點便可,因此代碼也很容易寫

 1public boolean isSubStructure(TreeNode A, TreeNode B) {
2    //邊界條件判斷,若是A和B有一個爲空,返回false
3    if (A == null || B == null)
4        return false;
5    return isSub(A, B);
6}
7
8boolean isSub(TreeNode A, TreeNode B) {
9    //這裏若是B爲空,說明B已經訪問完了,肯定是A的子結構
10    if (B == null)
11        return true;
12    //若是B不爲空A爲空,或者這兩個節點值不一樣,說明B樹不是
13    //A的子結構,直接返回false
14    if (A == null || A.val != B.val)
15        return false;
16    //當前節點比較完以後還要繼續判斷左右子節點
17    return isSub(A.left, B.left) && isSub(A.right, B.right);
18}

但實際上B若是是A的子結構的話,不必定是從根節點開始的,也多是下面這樣

也就是說B不光有多是A的子結構,也有多是A左子樹的子結構或者右子樹的子結構,因此若是從根節點判斷B不是A的子結構,還要繼續判斷B是否是A左子樹的子結構和右子樹的子結構,代碼以下

 1public boolean isSubStructure(TreeNode A, TreeNode B) {
2    if (A == null || B == null)
3        return false;
4    //先從根節點判斷B是否是A的子結構,若是不是在分別從左右兩個子樹判斷,
5    //只要有一個爲true,就說明B是A的子結構
6    return isSub(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
7}
8
9boolean isSub(TreeNode A, TreeNode B) {
10    //這裏若是B爲空,說明B已經訪問完了,肯定是A的子結構
11    if (B == null)
12        return true;
13    //若是B不爲空A爲空,或者這兩個節點值不一樣,說明B樹不是
14    //A的子結構,直接返回false
15    if (A == null || A.val != B.val)
16        return false;
17    //當前節點比較完以後還要繼續判斷左右子節點
18    return isSub(A.left, B.left) && isSub(A.right, B.right);
19}


總結



B是A的子結構不必定是從根節點開始判斷B是不是A的子結構,也有可能B是A左子樹或右子樹的子結構,因此若是從根節點判斷B不是A的子結構的時候還要分別判斷A的子樹中是否包含B。



374,二叉樹的最小深度

373,數據結構-6,樹

372,二叉樹的最近公共祖先

367,二叉樹的最大深度


長按上圖,識別圖中二維碼以後便可關注。


若是以爲有用就點個"贊"吧

本文分享自微信公衆號 - 數據結構和算法(sjjghsf)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索