力扣題解 110 平衡二叉樹

2021-10-09 06:32:18 字數 1502 閱讀 6604

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。

本題中,一棵高度平衡二叉樹定義為:

乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過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...