题目大意
判断一颗二叉树是否是“高度”平衡的。
平衡二叉树的定义是二叉树的任意节点的两颗子树之间的高度差小于等于1。
这实际上是AVL树(维基百科)的定义。
解题思路
递归判断自身和以及自身左右子树是否都是平衡的。
而每个循环内判断的依据就是判断树的深度,之前做过的。
代码
class Solution(object):
def maxDepth(self, root):
if root == None:
return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right))+1
def isBalanced(self, root):
""" :type root: TreeNode :rtype: bool """
if root == None:
return True
if abs(self.maxDepth(root.left) - self.maxDepth(root.right)) > 1:
return False
return self.isBalanced(root.left) and self.isBalanced(root.right)
总结
and/or的用法要牢记,不仅仅是用在if判断里。