給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。
示例 1:
給定二叉樹 [3,9,20,null,null,15,7]
3
/ \9 20
/ \
15 7
返回 true 。
示例 2:
給定二叉樹 [1,2,2,3,3,null,null,4,4]
1
/ \2 2
/ \3 3
/ \4 4
返回 false 。
樹的高度即為樹的最大深度, 因此此問題是求解二叉樹的最大深度的變形. 求解二叉樹最大深度的在這裡力扣刷題-104. 二叉樹的最大深度. 根據平衡二叉樹的定義可知, 我們要想確定乙個二叉樹是否是平衡的, 需要確認每個節點的左右兩個子樹的高度差的絕對值不超過1. 在計算節點的左右兩個子樹的高度時, 用到了求解樹的最大深度的過程.
因此, 同樣的, 確定一顆二叉樹是否為平衡二叉樹也可以通過套用分治法的思想divide and conquer思想及實際應用來分析問題. 直接分治法三步走:
devide: 將原二叉樹分解為根節點和左右兩個子二叉樹.
conquer: 首先判斷根節點是否平衡, 然後再遞迴地判斷左二叉樹和右二叉樹是否平衡.
combine: 將根節點, 左子樹, 右子樹的結果取並, 即得到原二叉樹是否是平衡的.
**如下:
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
int leftdepth =
maxdepth
(root-
>left)
;int rightdepth =
maxdepth
(root-
>right)
;int diff = leftdepth - rightdepth;
if(diff >
1or diff <-1
)return
isbalanced
(root-
>left)
andisbalanced
(root-
>right);}
intmaxdepth
(treenode* root)
int leftdepth =
maxdepth
(root-
>left)
;int rightdepth =
maxdepth
(root-
>right)
;return
max(leftdepth, rightdepth)+1
;}};
力扣 簡單 110 平衡二叉樹
給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,null,4,4 返回 f...
LeetCode 力扣 110 平衡二叉樹
判斷一棵樹是否是平衡二叉樹,平衡二叉樹定義如下 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過 1,並且左右兩個子樹都是一棵平衡二叉樹。直接按照定義來吧,並且多定義乙個求高度的函式,之前在 104 題 做過。public boolean isbalanced treenode root 它的左...
力扣解題思路 110 平衡二叉樹 糾錯記錄
思路 判斷一棵樹是否是平衡二叉樹。屬於簡單題,用dfs記錄每條路徑的長度,比較每個節點的左右子樹長度,只要不滿足就是false。但是做到一半我竟然卡住了 public boolean flag true public boolean isbalanced treenode root public i...