劍指 Offer JZ39 平衡二叉樹

2021-10-08 04:00:38 字數 1215 閱讀 7881

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。

在這裡,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹

平衡樹

平衡樹(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...