題目描述
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
在這裡,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹 。
思路:
平衡二叉樹的定義是:所謂的平衡之意,就是樹中任意乙個結點下左右兩個子樹的高度差不超過 1。
解題思路有兩種,只遍歷一次的方法最優。
1、重複遍歷多次:在遍歷樹的每個結點的時候,呼叫函式treedepth得到它的左右子樹的深度。如果每個結點的左右子樹的深度相差都不超過1,則這是一顆平衡的二叉樹。這種方法的缺點是,首先判斷根結點是不是平衡的,需要使用treedepth獲得左右子樹的深度,然後還需要繼續判斷子樹是不是平衡的,還是需要使用treedepth獲得子樹的左右子樹的深度,這樣就導致了大量的重複遍歷。
2、只遍歷一次:重複遍歷會影響演算法的效能,所以很有必要掌握不需要重複遍歷的方法。如果我們用後序遍歷的方式遍歷二叉樹的每乙個結點,在遍歷到乙個結點之前我們就已經遍歷了它的左右子樹。只要在遍歷每個結點的時候記錄它的深度(某一結點的深度等於它到葉結點的路徑的長度),我們就可以一邊遍歷一邊判斷每個結點是不是平衡的
**實現:
public
class
solution
public
intheight
(treenode root)
private
intmax
(int i,
int j)
}
計算樹的深度,樹的深度=max(左子樹深度,右子樹深度)+1。在遍歷過程中,判斷左右子樹深度相差是否超過1,如果不平衡,則令樹的深度=-1,用來表示樹不平衡。最終根據樹的深度是否等於-1來確定是否為平衡樹。 《劍指offer》 判斷平衡二叉樹
題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。考察平衡樹的概念和遞迴的使用。平衡樹是指,樹中的每個節點的左右子樹的高度差小於等於1。class solution if isbalanced solution proot left isbalanced solution proot righ...
劍指offer 平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹 1 重複遍歷結點 參考上一題求二叉樹的深度,先求出根結點的左右子樹的深度,然後判斷它們的深度相差不超過1,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...
劍指offer 平衡二叉樹
本文首發於我的個人部落格 尾尾部落 題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。解題思路 定義 平衡二叉查詢樹,簡稱平衡二叉樹。可以是空樹。假如不是空樹,任何乙個結點的左子樹與右子樹都是平衡二叉樹,並且高度之差的絕對值不超過1。遍歷每個結點,借助乙個獲取樹深度的遞迴函式,根據該結點的左右...