Leetceode 二叉樹 110 平衡二叉樹

2021-10-23 16:30:27 字數 1303 閱讀 1381

110. 平衡二叉樹

難度簡單458收藏分享切換為英文關注反饋

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

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

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

從底至頂(提前阻斷)

此方法為本題的最優解法,但「從底至頂」的思路不易第一時間想到。

思路是對二叉樹做先序遍歷,從底至頂返回子樹最大高度,若判定某子樹不是平衡樹則 「剪枝」 ,直接向上返回。

演算法流程:

recur(root):遞迴返回值:

當節點root 左 / 右子樹的高度差 <2 :則返回以節點root為根節點的子樹的最大高度,即節點 root 的左右子樹中最大高度加 ( max(left, right) + 1 );

當節點root 左 / 右子樹的高度差 ≥2 :則返回−1 ,代表 此子樹不是平衡樹 。

遞迴終止條件:

當越過葉子節點時,返回高度 00 ;

當左(右)子樹高度 left== -1 時,代表此子樹的 左(右)子樹 不是平衡樹,因此直接返回 -1;

isbalanced(root) :返回值: 若 recur(root) != 1 ,則說明此樹平衡,返回 true ; 否則返回 false 。

複雜度分析:

時間複雜度 o(n): n為樹的節點數;最差情況下,需要遞迴遍歷樹的所有節點。

空間複雜度 o(n): 最差情況下(樹退化為鍊錶時),系統遞迴需要使用 o(n) 的棧空間。

class solution 

public int depth(treenode root)

}

(二叉樹)110 平衡二叉樹

輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1 給定二叉樹 3,9,20,null,null,15,7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,null,4,4 返回 false 若...

110 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,n...

110 平衡二叉樹

給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回 true 思路 注釋 private boolean isbala...