輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)
# -*- coding:utf-8 -*-
class treenode:
def __init__(self, x):
self.val = x
self.left = none
self.right = none
class solution:
def hassubtree(self, proot1, proot2):
# write code here
if proot1 == none or proot2 == none:
return false
def hasequal(proot1, proot2):
if proot1 == none: #若被匹配的樹a為空,而匹配的樹b不為空,那麼匹配直接失敗
return false
if proot2 == none: #若匹配的子結構的結點為空,說明已經匹配上了
return true
if proot1.val == proot2.val:
if proot2.left == none:
leftequal= true #不能直接返回return true ,因為只能說明測試的子結構的左子樹匹配了
else:
leftequal = hasequal(proot1.left, proot2.left)
if proot2.right == none:
rightequal= true #不能直接返回return true,因為只能說明測試的子結構的右子樹匹配上了
else:
rightequal = hasequal(proot1.right, proot2.right)
return leftequal and rightequal
return false
if proot1.val == proot2.val:
ret = hasequal(proot1, proot2)
if ret: #直接返回會報錯 不餓能去掉if ret ,因為根結點沒有匹配上,還要匹配左子樹和右子樹是否能匹配上
return ret
ret = self.hassubtree(proot1.left, proot2) #匹配a樹的左子樹
if ret:
return ret
ret = self.hassubtree(proot1.right, proot2) #匹配a樹的右子樹
return ret
劍指offer 樹的子結構
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。解析 解決樹類問題的時候遞迴是乙個很好的解決方案,並且寫的程式簡單,理解起來也很容易。遞迴的時候謝了乙個函式來判斷當前兩個根節點對應的子樹是否相等 issubtree 不想...
劍指offer 樹的子結構
題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。這實際上二叉樹遍歷演算法的一種應用,要在原二叉樹中查詢是否具有某課子樹,只需要判斷每個節點是否都在二叉樹中是否出現即可。所以需要先判斷頭結點,只有頭結點符合要求才繼續比較其子樹是否符合,一樣依次從頭結點開始比較直到其左右子樹進行比較,如果都符合...
劍指offer 樹的子結構
大體思路如下 在程式遞迴過程中,記得注意遞迴的出口以及空指標的處理 主程式中在root1 root2非空的條件下才能去判斷 判斷judge函式中,一些邊界出口為 if root2 null return true if root1 null return false public class sol...