平衡二叉樹:每乙個節點的左右子樹的高度差不超過1.
對於一顆樹,它是乙個平衡二叉樹需要滿足三個條件:它的左子樹是平衡二叉樹,它的右子樹是平衡二叉樹,它的左右子樹的高度差不大於1。
本題同:劍指39.平衡二叉樹
本題的遞迴關鍵是找好遞迴的返回值。
☆☆☆思路1:自頂向下的遞迴,類似於前序遍歷。借助乙個獲取樹深度的遞迴函式。
思路1的缺點是在判斷上層節點時,會多次重複遍歷下層節點,增加了不必要的開銷,會重複計算多次子樹高度。
☆☆☆☆思路2【最優解】:自底向上的遞迴,類似於後序遍歷。邊求高度邊判斷,對於每個節點,高度height只會被呼叫一次。
☆☆☆☆思路3:新定義乙個內部類,使得遞迴的返回值包括當前樹是否是bst和當前樹的高度這兩個資訊
classsolution
}public
boolean
isbalanced(treenode root)
//方法1,以下函式用來獲取樹的最大深度
private
inttreedepth(treenode root)
//方法2 自底向上,類似於後序遍歷
private
intgetdepth(treenode root)
//方法3
private
returnnode isbst(treenode root)
if (math.abs(left.depth - right.depth) > 1)
//不滿足上面3種情況,說明平衡了,樹的深度為左右倆子樹最大深度+1
return
new returnnode(math.max(left.depth,right.depth) + 1, true
); }
}
leetcode 110 平衡二叉樹 平衡二叉樹
leetcode 110 平衡二叉樹 平衡二叉樹要求所有節點的左右子樹的高度差小於1,因此,只需在遍歷的時候返回其左右子樹的深度。definition for a binary tree node.public class treenode treenode int val treenode int...
LeetCode110 平衡二叉樹
給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回true。示例 2 給定二叉樹 1,2,2,3,3,null,nul...
LeetCode 110 平衡二叉樹
給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回true。示例 2 給定二叉樹 1,2,2,3,3,null,nul...