LeetCode110 平衡二叉樹

2022-06-07 18:18:08 字數 1113 閱讀 1339

平衡二叉樹:每乙個節點的左右子樹的高度差不超過1.

對於一顆樹,它是乙個平衡二叉樹需要滿足三個條件它的左子樹是平衡二叉樹,它的右子樹是平衡二叉樹,它的左右子樹的高度差不大於1。

本題同:劍指39.平衡二叉樹

本題的遞迴關鍵是找好遞迴的返回值。

☆☆☆思路1:自頂向下的遞迴,類似於前序遍歷。借助乙個獲取樹深度的遞迴函式。

思路1的缺點是在判斷上層節點時,會多次重複遍歷下層節點,增加了不必要的開銷,會重複計算多次子樹高度。

☆☆☆☆思路2【最優解】:自底向上的遞迴,類似於後序遍歷。邊求高度邊判斷,對於每個節點,高度height只會被呼叫一次。

☆☆☆☆思路3:新定義乙個內部類,使得遞迴的返回值包括當前樹是否是bst當前樹的高度這兩個資訊

class

solution

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