# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution:
defhassubtree
(self, proot1, proot2):
result = false
if proot1 is
notnone
and proot2 is
notnone:
if proot1.val == proot2.val:
result = self.doestree1hastree2(proot1,proot2)
if result==false:
result = self.hassubtree(proot1.left,proot2)
if result==false:
result = self.hassubtree(proot1.right,proot2)
return result
defdoestree1hastree2
(self, node1, node2):
if node2==none:
return
true
if node1==none:
return
false
if node1.val != node2.val:
return
false
return self.doestree1hastree2(node1.left,node2.left) and self.doestree1hastree2(node1.right,node2.right)
解釋:這裡是雙遞迴來實現的二叉樹b是否包含二叉樹a,首先外層的遞迴是根節點a,b是否滿足條件,如果不滿足條件,那麼換左孩子,如果還不滿足條件換右孩子。內層迴圈就是那個條件,即在這個根節點上b是否包含a。
遞迴的話要考慮遞迴終止條件,外層迴圈返回result就行,內層迴圈,如b為空,那麼查詢成功,如a為空,失敗,如果兩節點值不同,失敗。
《劍指offer》 判斷平衡二叉樹
題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。考察平衡樹的概念和遞迴的使用。平衡樹是指,樹中的每個節點的左右子樹的高度差小於等於1。class solution if isbalanced solution proot left isbalanced solution proot righ...
劍指offer 判斷是否是對稱的二叉樹
對於一棵二叉樹,如何判斷這棵二叉樹是否是對稱的二叉樹?例如 從以上的圖中我們可以看出,關於根節點左右對稱的二叉樹就是對稱的二叉樹,那麼在程式中我們需要如何判斷呢?在二叉樹的先序遍歷中,先訪問根結點,再訪問左子樹,再訪問右子樹。如果是對稱的二叉樹,那麼它的左右子樹應該是一樣的,也就是先訪問根,再訪問右...
劍指offer 判斷二叉樹是否為平衡二叉樹
平衡二叉樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。第一種遞迴思路,根據定義來,遞迴返回 r l 1 and balancetree r and balancetree l 但是這個自頂向下的...