1. 程式人生 > 其它 >牛客網 劍指Offer JZ17 樹的子結構

牛客網 劍指Offer JZ17 樹的子結構

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

輸入:

{8,8,#,9,#,2,#,5},{8,9,#,2}

返回值:
true

1.先遍歷樹pRoot1,如果遍歷到和pRoot2節點值相同的節點,進入isSubTree方法判斷接下來的節點是否都相同
2.節點都相同返回True;不相同返回False,並且繼續遍歷樹pRoot1找下一個相同的節點
3.如果遍歷完了pRoot1還沒有返回過True,說明pRoot2不是pRoot1的子結構,返回False
isSubTree方法:用於判斷從pRoot1的子樹是否有和pRoot2相同的部分 1.採用遞迴的思想,如果節點root1與root2的節點不同,則說明pRoot1的子樹與pRoot2不具有相同的節點
2.如果值相同,則遞迴判斷(isSubTree)他們各自得左右節點的值是不是相同 3.遞迴的終止條件時到達pRoot1或pRoot2的葉節點
class
Solution: def dfs(self,a,b): if not b: return True elif not a: return False elif a.val != b.val: return False return self.dfs(a.left, b.left) and self.dfs(a.right,b.right) def HasSubtree(self, pRoot1, pRoot2): if not pRoot1 or not pRoot2:
return False return self.dfs(pRoot1,pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)