这个题解采用了递归的方式来判断一棵二叉树是否是平衡的。平衡二叉树的定义是,任意节点的左右子树的深度相差不超过1。题解中定义了一个辅助函数 helper,这个函数递归地计算树的高度,同时检查是否满足平衡条件。如果子树是平衡的,返回其高度;如果发现不平衡,则返回-1作为标记。主函数通过检查 helper 的返回值是否为 -1 来判断整棵树是否平衡。
时间复杂度: O(n)
空间复杂度: O(n)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
def helper(root):
if root is None:
return 0 # 空树高度为0
left = helper(root.left) # 计算左子树的高度
if left == -1:
return -1 # 左子树不平衡
right = helper(root.right) # 计算右子树的高度
if right == -1:
return -1 # 右子树不平衡
if abs(left - right) > 1:
return -1 # 当前节点的子树不平衡
return max(left, right) + 1 # 返回当前节点的高度
return helper(root) != -1 # 根据根节点的高度判断是否平衡