題目:輸入兩棵二叉樹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...