python 得到樹的深度 判斷樹是否為平衡樹

2021-07-31 21:47:27 字數 1702 閱讀 9666

0. 樹中結點的結構:

class treenode:

def __init__(self, x):

self.val = x

self.left = none

self.right = none

1. 樹的深度:

def treedepth(self,proot):

if(not proot):

return 0

else:

nleft = self.treedepth(proot.left)

nright = self.treedepth(proot.right)

return max(nleft+1,nright+1)

解釋:nleft,nright 分別表示proot的左右結點的深度,返回兩者中較大的,即為深度。

2. 判斷是否為平衡樹:

平衡樹:樹中任意結點的左右子樹深度差小於或者等於1.

def isbalanced_solution(self, proot):  #判斷是否為平衡二叉樹

if(not proot):

return true

else:

if abs(self.treedepth(proot.left)-self.treedepth(proot.right))>1: #當某一結點的左右子樹高度差大於1時,返回false

return false

else:

return self.isbalanced_solution(proot.left) and self.isbalanced_solution(proot.right) #否則遞迴地向下判斷其子樹是否平衡。

這裡解釋一下為什麼要 「遞迴地向下判斷其子樹是否平衡」:

如下圖所示:若proot=a,則左右高度相差為1,滿足平衡樹的條件。但是,proot=b 時,左右的高度差為2,則不滿足平衡樹,因此,我們需要遞迴地向下判斷每個結點的子樹是否平衡。

總**:

class solution:

def isbalanced_solution(self, proot): #判斷是否為平衡二叉樹

if(not proot):

return true

else:

if abs(self.treedepth(proot.left)-self.treedepth(proot.right))>1:

return false

else:

return self.isbalanced_solution(proot.left) and self.isbalanced_solution(proot.right)

def treedepth(self,proot):

if(not proot):

return 0

else:

nleft = self.treedepth(proot.left)

nright = self.treedepth(proot.right)

return max(nleft+1,nright+1)

Python 樹 Node Depth 節點深度

有乙個二叉樹,長這樣 1 2 3 4 5 6 7 8 9 寫乙個函式,返回所有節點深度值的和。其中節點深度是乙個節點到根節點的距離,在這裡舉個例子,根節點是1 那麼值為2 的節點到根節點的距離是1.此時應該得到的sum的結果是16。可以使用乙個堆疊結構,首先將根節點以及他的深度depth的鍵值對儲存...

求樹的深度

輸入一棵二元樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 輸入二元樹 10 6 14 4 12 16輸出該樹的深度3。實現簡單的乙個查詢二叉樹的深度的函式。int gettreeheight tnode root int l...

求樹的深度

1.以孩子兄弟鍊錶作為儲存結構 資料結構 typedef struct csnodecsnode,cstree 演算法 int depth cstree t return m 1 子樹的最大深度加上根節點的深度 2.利用層次遍歷,還是用上述資料結構 演算法思想 利用佇列,將節點按層次順序入隊,出隊,...