判斷一顆二叉樹是否爲二叉平衡樹 python 代碼

  輸入一顆二叉樹,判斷這棵樹是否爲二叉平衡樹。首先來看一下二叉平衡樹的概念:它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,而且左右兩個子樹都是一棵平衡二叉樹。所以判斷一顆二叉平衡樹的關鍵在於求出左右子樹的高度差,而二叉樹的高度又是怎麼定義的呢?二叉樹的高度指的是從根節點到葉子節點全部路徑上包含節點個數的最大值。因此咱們能夠得出,父親節點的高度與左右子樹高度的關係爲:父親節點的高度=max(左子樹高度,右子樹高度)+1,同時咱們知道,葉子節點的高度值爲1(或則0,這裏定義1或者0對判斷結果沒有影響),根據這兩條規則,咱們就能夠利用迭代來求出樹的高度。從葉子節點開始不斷回溯,依次求得左右節點的高度並判斷左右節點的高度差,而後繼續向上判斷,具體過程參見代碼。spa

class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: #判斷平衡二叉樹  def IsBalanced_Solution(self, pRoot): # write code here def balanced(root,height=0): #葉子節點的高度定義爲0 if not root: height=0 return True,height #由根節點向下迭代 balanceleft,left=balanced(root.left) balanceright,right=balanced(root.right) #若是左右子樹都是平衡二叉樹而且高度差不超過1,那麼繼續向上判斷,父親節點的高度值=max(左,右)+1 if balanceleft and balanceright: if abs(left-right)<=1: height=left+1 if left>right else right+1 return True,height return False,height balance,height=balanced(pRoot) return balance
相關文章
相關標籤/搜索