劍指offer 樹的子結構

2021-09-24 05:39:19 字數 1036 閱讀 2479

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

因為作為結果的空判定和輸入的空判定邏輯並不一樣,所以最好分開寫成兩個函式。第乙個原函式用來判定輸入的元素是否符合輸入的要求,不符合直接丟擲。第二個函式用來判定是否為子樹。判定1:如果這當前的兩個樹的根相同,那麼分別判斷左側和右側,直到全部判定完b樹。判定2:如果不同的話,就試試a的左側或者右側樹為根和b判定。這裡有一種可能是a和b的根節點是符合的,但是在向下判定的過程**現了問題,在這種情況下,必須要能夠回退到根進行判定2,否則就會停止運算直接輸出結果了。.所以要加入乙個res變數。

# -*- 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 not proot1 or not proot2:

return false

return self.issubtree(proot1, proot2)

def issubtree(self, p1, p2):

if not p2:

return true

if not p1:

return false

res = false

if p1.val == p2.val:

res = self.issubtree(p1.left, p2.left) and self.issubtree(p1.right, p2.right)

return res or self.issubtree(p1.left, p2) or self.issubtree(p1.right, p2)

劍指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...