輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
在這裡,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹
平衡樹平衡樹(balance tree,bt) 指的是,任意節點的子樹的高度差都小於等於1。
二叉排序樹一棵空樹,或者是具有下列性質的二叉樹:
若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值
若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值
左、右子樹也分別為二叉排序樹
沒有鍵值相等的結點。
abs
(number)
max
(number1, number2)
方法和計算樹的深度差不多,唯一的區別在於,計算完左右子樹的深度後,如果左右子樹的深度大於1,即不平衡,則返回乙個特殊值;同時,在計算左(右)子樹深度後,我們立刻判斷深度是否為該特殊值,如果為該特殊值,說明該節點的左(右)子樹不平衡,則整顆二叉樹不平衡,此時我們不必再繼續計算剩餘步驟,而是將特殊值繼續傳遞給上層。
class
solution
int treedepth =
getdepth
(proot);if
(treedepth ==-1
)else
}private
:int
getdepth
(treenode* proot)
// 2. 獲取左右子樹的深度
int leftdepth =
getdepth
(proot-
>left)
;// 2
if(leftdepth ==-1
)return-1
;// 4
int rightdepth =
getdepth
(proot-
>right)
;// 2
if(rightdepth ==-1
)return-1
;// 4
// 3. 返回值if(
abs(leftdepth - rightdepth)
>1)
else
// 4.回過頭去處理遞迴}}
;
劍指Offer JZ39 平衡二叉樹 C 實現
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。在這裡,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹 1 思路 平衡二叉樹的任意結點的子樹的高度差都小於等於1,在上一題的方法三中,我們通過分治法遞迴地求左右子樹的深度以得到當前結點的深度,在此題中只需要在方法三的遞迴回溯時加上一條判斷語句來判斷...
39 劍指offer 平衡二叉樹
題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。解題思路 平衡二叉樹,對於每個根節點左右子樹高度差小於等於1 1 class solution 12bool isbalanced solution treenode proot 17int nleft treedepth proot left...
劍指offer 39 平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。首先,什麼是平衡二叉樹?如果二叉樹中任意結點的左右子樹深度相差不超過1,那麼它就是平衡二叉樹。最直接的做法,遍歷每個結點,借助乙個獲取樹深度的遞迴函式,根據該結點的左右子樹高度差判斷是否平衡,然後遞迴地對左右子樹進行判斷。public class sol...