题目
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example 1:
Given the following tree [3,9,20,null,null,15,7]:
3
/ \
9 20
/ \
15 7
Return true.
Example 2:
Given the following tree [1,2,2,3,3,null,null,4,4]:
1
/ \
2 2
/ \
3 3
/ \
4 4
解题思路
这一道题是要判断二叉树是否为平衡二叉树,需要递归的判断每个节点是不是平衡的。因为需要查询树的高度,可以直接调用LeetCode: 104. Maximum Depth of Binary Tree的代码。
# 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 root is None:
return True
l = self.maxDepth(root.left)
r = self.maxDepth(root.right)
print(l,r)
if abs(l-r)>1:
return False
else:
return self.isBalanced(root.left) and self.isBalanced(root.right)
def maxDepth(self, root: TreeNode) -> int:
res = 0
if root is None:
return res
level = [root]
while level:
res += 1
internode = []
for node in level:
internode.extend([node.left, node.right])
level = [leaf for leaf in internode if leaf]
return res
LeetCode上大佬的解法:
class Solution(object):
def isBalanced(self, root):
self.isBalanced = True
self.getHeight(root)
return self.isBalanced
def getHeight(self, root):
if not root: return 0
left = self.getHeight(root.left)
right = self.getHeight(root.right)
if abs(left - right) > 1:
self.isBalanced = False
return max(left, right) + 1