簡單
給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過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 。
從頂至低
最簡單的思想,每次獲得根節點的左子樹高度和右子樹高度進行判斷是否為平衡二叉樹
不過這樣會造成重複計算
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
:def
isbalanced
(self, root: treenode)
->
bool:if
not root:
return
true
# 判斷是否平衡
ifabs
(self.height(root.left)
- self.height(root.right)
)>1:
return
false
# 繼續判斷左孩子和右孩子
return self.isbalanced(root.left)
and self.isbalanced(root.right)
# 計算高度
defheight
(self, root):if
not root:
return
0return
max(self.height(root.left)
, self.height(root.right))+
1
從底至頂
先判斷子樹,返回高度,如果某子樹不是平衡樹,則返回 -1
只需判斷函式的返回是否為 -1
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
:def
isbalanced
(self, root: treenode)
->
bool
:return self.height(root)!=-
1def
height
(self, root):if
not root:
return
0
left_height = self.height(root.left)
right_height = self.height(root.right)
if left_height !=-1
and right_height !=-1
andabs
(left_height-right_height)
<=1:
return
max(left_height, right_height)+1
else
:return
-1
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...