1. 程式人生 > >判斷一顆二叉樹是否為二叉平衡樹 python 代碼

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

node 二叉 路徑 tree 過程 二叉平衡樹 個數 turn right

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

首先定義二叉樹的類

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

然後利用叠代進行判斷

#判斷平衡二叉樹    
    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

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