輸入兩棵二叉樹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樹子樹的根節點,同時遍歷兩棵樹,判斷是否所有節點都相同 特殊情況 ...