Skip to content

110. 平衡二叉树

题目

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

img

输入: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

Released under the MIT License.