劍指offer 樹的子結構(遞迴 C )

2021-10-03 01:15:07 字數 945 閱讀 6175

原題鏈結

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

相似題目:leetcode 題解 | 1367. 二叉樹中的列表(樹的子結構 變形 c++)

(二叉樹 遞迴)o(n

m)o(nm)

o(nm

)此題的**分為兩個部分

遍歷樹a中的所有非空節點r

同時用定義issame()函式判斷樹a中以r為根節點的子樹是不是包含和樹b一樣的結構(規定從根節點開始匹配)

issame()函式:如果當前的兩個節點的val相同,則繼續分別匹配他們左子樹和右子樹,否則返回false。當然如果遍歷到後面b中的結點為空了,那說明已經匹配成功了

時間複雜度是o(n

m)o(nm)

o(nm

):最壞情況,遍歷樹a的每個點,且每次要遍歷一遍樹b,空間複雜度是o(h

)o(h)

o(h)

:樹的高度,遞迴需要棧空間

/*

struct treenode

};*/

class

solution

// judge if b is part of a_substree (compared from root)

bool

issame

(treenode* p1, treenode* p2)

};

bug說明如果在主函式了,用issame返回結果是錯誤的,因為這樣你只檢查了兩個結點。

一開始我是這樣寫的,但是因為牛客測試樣例不全,所以僥倖通過了,但在leetcode上就通不過

劍指offer 樹的子結構 C

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 注 這裡需要判斷是否是子結構,不需要判斷是子樹.這個和另外乙個題很像,leetcode 572.另乙個樹的子樹 題目中說了,空樹不是任意乙個樹的子結構,這一點需要注意。首先,思路是比較簡單的,通過乙個遞迴來實現。...

劍指offer 樹的子結構

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。解析 解決樹類問題的時候遞迴是乙個很好的解決方案,並且寫的程式簡單,理解起來也很容易。遞迴的時候謝了乙個函式來判斷當前兩個根節點對應的子樹是否相等 issubtree 不想...

劍指offer 樹的子結構

題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。這實際上二叉樹遍歷演算法的一種應用,要在原二叉樹中查詢是否具有某課子樹,只需要判斷每個節點是否都在二叉樹中是否出現即可。所以需要先判斷頭結點,只有頭結點符合要求才繼續比較其子樹是否符合,一樣依次從頭結點開始比較直到其左右子樹進行比較,如果都符合...