返回

如何快速判断二叉树是否平衡?

后端

什么是平衡树?
平衡树是一种二叉查找树,其中任何结点的两棵子树的高度差都不超过1。换句话说,平衡树的左右子树高度接近。平衡树的特性使得查找、插入和删除操作都可以在对数时间内完成,因此它是一种非常高效的数据结构。

判断平衡性

判断二叉树是否平衡可以采用递归算法。首先,对于每个结点,我们可以计算其左右子树的高度。然后,如果左右子树高度差超过1,则该结点不平衡。否则,该结点平衡。

为了提高算法的效率,我们可以使用动态规划来计算结点的子树高度。这样,我们只需要遍历结点一次,就可以得到所有结点的子树高度。

def is_balanced(root):
    if not root:
        return True

    left_height = height(root.left)
    right_height = height(root.right)

    return abs(left_height - right_height) <= 1 and \
           is_balanced(root.left) and \
           is_balanced(root.right)

def height(root):
    if not root:
        return 0

    return max(height(root.left), height(root.right)) + 1

LeetCode题目31

现在,我们使用LeetCode题目31来演示算法的应用。题目要求我们判断一个给定二叉树是否平衡。我们可以使用上面的算法来解决这个问题。

def is_balanced(root):
    if not root:
        return True

    left_height = height(root.left)
    right_height = height(root.right)

    return abs(left_height - right_height) <= 1 and \
           is_balanced(root.left) and \
           is_balanced(root.right)

def height(root):
    if not root:
        return 0

    return max(height(root.left), height(root.right)) + 1

# 示例
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.right.right = TreeNode(5)

print(is_balanced(root))  # True

总结

本文介绍了一种快速判断二叉树是否平衡的算法。该算法基于递归和动态规划,可以高效地计算结点的子树高度,并判断结点是否平衡。我们还使用LeetCode题目31来演示算法的应用。