樹的子結構(Python and C 解法)

2022-08-24 19:24:11 字數 1823 閱讀 5378

輸入兩棵二叉樹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,1]

輸出:false

示例 2:

輸入:a = [3,4,5,1,2], b = [4,1]

輸出:true

需要分兩步完成:

第一步:遍歷樹a 的節點,尋找與樹b根節點相等的節點,如果找到了相等的節點,需要轉入第二步判斷。

第二步:對步驟一中找到的相等節點的子節點,進行匹配,a的左子節點與b的左子節點匹配,a的右子節點與b的右子節點進行匹配。

1

class

treenode:

2def

__init__

(self, x):

3 self.val =x

4 self.left =none

5 self.right =none67

class

solution:

8def issubstructure(self, a: treenode, b: treenode) ->bool:

9 result = false #

樹a為空或樹b為空,空樹不是任意乙個樹的子結構

10if a is

not none and b is

notnone:

11if a.val == b.val: #

找到了與樹b根節點相等的節點

12 result = self.recur(a, b) #

進行子樹匹配

13if

not result: #

繼續遍歷樹a的左子樹,尋找與樹b根節點相等的節點

14 result =self.issubstructure(a.left, b)

15if

not result: #

繼續遍歷樹a的右子樹,尋找與樹b根節點相等的節點

16 result =self.issubstructure(a.right, b)

17return

result

1819

defrecur(self, a, b):

20if b is none: #

樹b已匹配完成(越過葉子節點)

21return

true

22if a is none or a.val != b.val: #

已經越過樹a的葉節點,或子結構出現不相等的子節點

23return

false

24return self.recur(a.left, b.left) and self.recur(a.right, b.right) #

繼續匹配子節點

1

struct

treenode 6};

78class

solution

20return

result;21}

22bool recurr(treenode *a, treenode *b)

29 };

樹的子結構

題目 輸入兩顆二叉樹a和b 判斷b是不是a的子結構 二叉樹結點定義如下 首先 從樹根開始遍歷樹 如果結點與 b的根結點值相同 則繼續遍歷a的左子樹 以及b的左子樹 如果左子樹相同則遍歷a的右子樹以及b的左子樹 如果左右子樹都相同則 a包含b 如果結點與b的根節點值不同 則遍歷到a的左孩子 重複上述判...

樹的子結構

來自 劍指offer 的面試題18。題目 輸入兩棵二叉樹a和b,判斷b是不是a的子結構。二叉樹節點定義如下 public class treenode 思路分析 首先,在tree1中找到和tree2的根節點的值一樣的結點r 然後,再判斷tree1中以r為根結點的子樹是不是包含和tree2一樣的結構。...

樹的子結構

輸入兩顆二叉樹a,b,判斷b是不是a的子結構 思路 1 先判斷兩棵樹是否為空,是則沒有子樹 2 當兩棵樹為非空時,判斷當前的兩個根節點是否為子樹關係,若值相等,則繼續判斷左右子樹是否也對應相等 3 當根節點非子樹關係時,再判斷a樹的左右子樹和b樹是否有子樹。public class treenode...