劍指offerQ17樹的子結構

2021-10-02 21:02:27 字數 985 閱讀 4754

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

首先區分乙個概念 子樹和子結構

一棵大樹 a,一棵小樹 b,若 b 是 a 的子樹,則:

b 和 a 的結點值完全相同,它們倆的左子樹、右子樹所有結點的值也完全相同

或者 b 的左孩子和 a 的結點值完全相同,它們倆的左子樹、右子樹所有結點的值也完全相同

或者 b 的右孩子和 a 的結點值完全相同,它們倆的左子樹、右子樹所有結點的值也完全相同

這棵大樹的子樹有:

4 和 5 對應的兩棵子樹

3 本身自己完整的一棵樹

小框中的樹是大樹3的子結構

用遞迴的方法解題

class

solution

:def

hassubtree

(self, proot1, proot2)

:# write code here

ifnot proot1 or

not proot2:

return

false

return self.issubtree(proot1,proot2)

or self.hassubtree(proot1.left,proot2)

or self.hassubtree(proot1.right,proot2)

defissubtree

(self,proot1,proot2):if

not proot2:

return

true

ifnot proot1 or proot1.val!=proot2.val:

return

false

return self.issubtree(proot1.left,proot2.left)

and self.issubtree(proot1.right,proot2.right)

劍指offer 樹的子結構17

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 class solution defissubtree self,proot1,proot2 如果樹a空了,樹b沒空則匹配失敗 if proot1 none and proot2 is notnone retur...

劍指offer 17 樹的子結構

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 這是典型二叉樹遞迴問題。倆顆樹都不為空時,如果根節點相同,那麼判斷root2是不是root1的子樹,如果不是,那麼判斷root2是不是root1左子樹的子樹,如果還不是,那麼判斷root2是不是root1右子樹的...

劍指Offer (17)樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 實現如下 分兩步 第一步 尋找與b樹根節點val相等的a樹節點。如果找到進入第二步,否則繼續尋找,直到找完a樹 第二步 以找的節點作為a樹子樹的根節點,同時遍歷兩棵樹,判斷是否所有節點都相同 特殊情況 ...