劍指 Offer 26 樹的子結構

2021-10-10 04:39:31 字數 1513 閱讀 1859

劍指 offer 26. 樹的子結構

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。(約定空樹不是任意乙個樹的子結構)

b是a的子結構, 即 a中有出現和b相同的結構和節點值。

例如:給定的樹 a:

3/ \

45/ \ 12

給定的樹 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

遞迴(已ac)

思路如下

issubstructure 先序遍歷

因為判斷樹結構相同也是個遞迴的過程,我們遍歷b的節點nodeb並且與a對應節點nodea比較,有以下四種情況

1.nodeb為空,nodea不為空,這是允許的,返回true

2.nodeb為空, nodea為空,這也是允許的,返回true

3.nodeb不為空,nodea不為空,那麼比較這兩個值是否相等,相等則判斷子樹結構是否相同,否則返回false

4.nodeb不為空,nodea為空,那麼b就不是a的子結構,返回false

情況12可以合在一起,可以看到與issubstructure的終止條件有些差異,因此將判斷樹結構另寫乙個方法check()

差異的產生在於題目上規定了空樹不是任意乙個樹的子結構,這與我們判斷樹結構時的判據12正好相反

另乙個值得注意的點是issubstructure的遞迴函式部分,如果不仔細思考,很可能就使用check方法,與上述類似,情況124與

issubstructure的終止條件:當ab任意乙個為空時返回false

是不相同的,失去了issubstructure先序遍歷的結構,因此不一定會遍歷到所有a節點

那麼check實際上是個傳入的節點ab的值已經相等,判斷b的其他結構是否和a中對應的方法

時間mn,m為a中節點個數,n為b中節點個數,每遍歷到乙個a中節點,就要判斷是否與b中節點情況相同,最壞情況下每個節點都要判斷,因此為相乘

空間m, 最壞情況下ab都為鍊錶,因為是在a中找b,a結束那麼尋找過程也結束

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

boolean

check

(treenode a, treenode b)

}

如上

劍指offer26 樹的子結構

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。示例 1 輸入 a 1,2,3 b 3,...

劍指 Offer 26 樹的子結構

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。示例 1 輸入 a 1,2,3 b 3,...

劍指 Offer 26 樹的子結構

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。definition for a bin...