樹的子結構 劍指offer python版

2021-10-17 03:41:10 字數 1587 閱讀 5903

題目描述

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

示例1輸入

,

返回值

true

【思路1】

【思路2】

(1)從根節點開始同時訪問a、b

(2)首先判斷兩個樹是否開始重合(judge)

【思路1】

# -*- coding:utf-8 -*-

class

solution

:# 返回listnode

defreverselist

(self, phead):if

not phead or

not phead.

next

:return phead

pre=phead

mid=pre.

next

while mid:

last=mid.

next

mid.

next

=pre

pre=mid

mid=last

phead.

next

=none

return pre

【思路2】

class

solution

:def

hassubtree

(self, proot1, proot2)

:# write code here

result=

false

if proot1!=

none

and proot2!=

none

:if proot1.val==proot2.val:

result=self.judge(proot1,proot2)

if result==

false

: result=self.hassubtree(proot1.left,proot2)

if result==

false

: result=self.hassubtree(proot1.right,proot2)

return result

defjudge

(self, proot1, proot2)

:if proot2==

none

:return

true

if proot1==

none

:return

false

if proot1.val!=proot2.val:

return

false

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

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

方法1:簡單粗暴,缺點是利用了子字串判斷

方法2:比較複雜時間複雜度低

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