题目:
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
Return false.
代码+调试:
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def leftandrightlevel(self,root):
if root == None:
return 0
return 1+max(self.leftandrightlevel(root.left),self.leftandrightlevel(root.right))
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root == None:
return True
leftlevel = self.leftandrightlevel(root.left)
rightlevel = self.leftandrightlevel(root.right)
if abs(leftlevel-rightlevel)<=1:
return self.isBalanced(root.left) and self.isBalanced(root.right)#平衡二叉树的定义是二叉树的任意节点的两颗子树之间的高度差小于等于1,所以需要递归判断
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def leftandrightlevel(self,root):
if root == None:
return 0
return 1+max(self.leftandrightlevel(root.left),self.leftandrightlevel(root.right))
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root == None:
return True
leftlevel = self.leftandrightlevel(root.left)
rightlevel = self.leftandrightlevel(root.right)
if abs(leftlevel-rightlevel)<=1:
return self.isBalanced(root.left) and self.isBalanced(root.right)
else:
return False
if __name__ == '__main__':
l1_1 = TreeNode(1)
l1_2 = TreeNode(2)
l1_3 = TreeNode(3)
l1_1.left = l1_2
l1_2.left = l1_3
l3 = Solution().isBalanced(l1_1)
print l3
else:
return False
if __name__ == '__main__':
l1_1 = TreeNode(1)
l1_2 = TreeNode(2)
l1_3 = TreeNode(3)
l1_1.left = l1_2
l1_2.left = l1_3
l3 = Solution().isBalanced(l1_1)
print l3