給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。給定二叉樹
[3,9,20,null,null,15,7]
3
/ \9 20
/ \
15 7
返回 true
給定二叉樹[1,2,2,3,3,null,null,4,4]
1
/ \2 2
/ \3 3
/ \4 4
返回 false
來自於英文版的dissusion,其中的left == -1 or right == -1 不明白?
class solution(object):
def isbalanced(self, root):
def check(root):
if root is none:
return 0
left = check(root.left)
right = check(root.right)
if left == -1 or right == -1 or abs(left - right) > 1:
return -1
return 1 + max(left, right)
return check(root) != -1
用到的知識點:leetcode104.二叉樹的最大深度
class solution(object):
# recursion
def maxdepth(self, root):
""":type root: treenode
:rtype: int
"""if root is none:
return 0
else:
# 左子樹高度
ld = self.maxdepth(root.left)
# 右子樹高度
rd = self.maxdepth(root.right)
return max(rd,ld)+1
我的思路:
參考修正於:
class solution(object):
def isbalanced(self, root):
""":type root: treenode
:rtype: bool
"""if root is none:
return true
elif abs(self.maxdepth(root.left) - self.maxdepth(root.right)) > 1:
return false
# 以下沒想到
else:
return self.isbalanced(root.left) and self.isbalanced(root.right)
def maxdepth(self, root):
""":type root: treenode
:rtype: int
"""if root is none:
return 0
else:
# 左子樹高度
ld = self.maxdepth(root.left)
# 右子樹高度
rd = self.maxdepth(root.right)
return max(rd, ld) + 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...