110. 平衡二叉树
题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:true
示例 2:
输入:root = [1,2,2,3,3,null,null,4,4]
输出:false
示例 3:
输入:root = []
输出:true
提示:
- 树中的节点数在范围
[0, 5000]
内 -10^4 <= Node.val <= 10^4
解答
思路
计算左右子树的高度可以用递归实现,主要在递归中一旦发现这棵树是不平衡的,就应该立即停止,但这样不方便做,因为我们 返回的是子树的高度。这是一个正数,于是我们可以用 -1 表示这棵树是不平衡的。
如果高度差不符合平衡二叉树的要求,就返回 -1 给父节点,而父节点收到 -1 之后也 立刻返回给它的父节点。根节点得到的如果是子树的高度,说明子树都是平衡的,如果是 -1,说明子树中出现了不平衡的情况。
代码
Python 代码
python
class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
def get_height(node):
if node is None:
return 0
left_height = get_height(node.left)
if left_height == -1:
return -1
right_height = get_height(node.right)
if right_height == -1:
return -1
if abs(left_height - right_height) > 1:
return -1
return max(left_height, right_height) + 1
return get_height(root) != -1