题目描述
输入一棵二叉树的根结点,判断该树是不是平衡二叉树。
如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
注意:
- 规定空树也是一棵平衡二叉树。
样例:
解题思路
对于平衡二叉树,其每一个节点的左右子树的深度相差不超过1,所以需要做两件事:
1、遍历每一个节点
2、求出每个节点左右子树的深度差
对于1,应该用递归对树的节点进行遍历;
对于2,因为之前做过一道求二叉树的深度的题,所以直接拿来用。实现代码如下:
代码实现
class Solution(object):
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def treeDepth(root):
if not root:
return 0
l_height = treeDepth(root.left)
r_height = treeDepth(root.right)
return max(l_height, r_height) + 1
if not root:
return True
# 左右子树深度相差大于1则返回False
if abs(treeDepth(root.left) - treeDepth(root.right)) > 1:
return False
else:
# 递归遍历树的左右节点
return self.isBalanced(root.left) and self.isBalanced(root.right)