劍指offer 判斷二叉樹B是不是包含二叉樹A

2021-08-11 08:47:41 字數 1160 閱讀 5202

# -*- 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 但是這個自頂向下的...