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