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...