给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3 / \ 9 20 / \ 15 7
返回 true
。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1 / \ 2 2 / \ 3 3 / \ 4 4
返回 false
。
解题思路:看到这个题目我的第一想法是给每一个叶子节点通过BFS计算出它的高度(根节点设为1)然后将结果排序,比较最小和最大的高度差,看是否满足条件,是这个想法有一个问题,就是当树的叶子节点数量为一个的时候会出现错误。之后仔细思考了一下,可以采用递归的思想,对每个节点都计算其左子树和右子树的高度然后进行比较,AC代码如下:
class Solution(object): def isBalanced(self, root): """ :type root: TreeNode :rtype: bool """ if root is None: return True # 分别定义左右子树的高度 left_depth = 0 right_depth = 0 if root.left: left_depth = get_depth(root.left) if root.right: right_depth = get_depth(root.right) if abs(left_depth - right_depth) > 1: return False else: return self.isBalanced(root.left) and self.isBalanced(root.right) # 获取某一节点对应树的最大高度 def get_depth(root): if root is None: return 0 else: return max(get_depth(root.left), get_depth(root.right)) + 1