python劍指offer系列樹的子結構

2021-08-15 13:19:29 字數 1255 閱讀 4993

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

解法:對於兩棵二叉樹來說,要判斷b是不是a的子結構,首先第一步在樹a中查詢與b根節點的值一樣的節點。

通常對於查詢樹中某乙個節點,我們都是採用遞迴的方法來遍歷整棵樹。

第二步就是判斷樹a中以r為根節點的子樹是不是和樹b具有相同的結構。

這裡同樣利用到了遞迴的方法,如果節點r的值和樹的根節點不相同,則以r為根節點的子樹和樹b肯定不具有相同的節點;

如果它們值是相同的,則遞迴的判斷各自的左右節點的值是不是相同。

遞迴的終止條件是我們達到了樹a或者樹b的葉節點。

# -*- 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

result = false

if proot1 != none and proot2 != none:

if proot1.val == proot2.val:

result = self.has2tree( proot1, proot2)

if not result:

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

if not result:

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

return result

def has2tree(self, proot1, proot2):

if proot2 == none:

return true

if proot1 == none:

return false

if proot1.val != proot2.val:

return false

return self.has2tree(proot1.left,proot2.left) and self.has2tree(proot1.right , proot2.right)

《劍指offer》系列 1

最近一直在看劍指offer,這上面的題目都是比較考察程式設計能力的,打算做個記錄,把寫過的 儲存下來 1.實現乙個string類 面試官的考察點應該在以下幾點 1.模板類的書寫 2.對於賦值函式考察的幾點 1 是否返回引用,因為只有返回引用,才能連續的進行賦值 2 引數是否是常量 3 是否是自身賦值...

《劍指offer》系列 2

1.求斐波那契數列的第n項 這個題目很簡單,講遞迴的書上都是用這個來講的,但是面試的時候,如果你寫個遞迴,那估計會讓人失望的,因為遞迴的效率真是乙個問題,你可以測試一下,輸入50,基本上得到結果的時間,夠你去喝杯茶了 include using namespace std 使用遞迴效率太低了,甚至可...

python實現劍指offer系列 重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class node def init self,data,left,right self.data data self.le...