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.利用層次遍歷,還是用上述資料結構 演算法思想 利用佇列,將節點按層次順序入隊,出隊,...