返回
如何快速判断二叉树是否平衡?
后端
2023-11-14 03:24:00
什么是平衡树?
平衡树是一种二叉查找树,其中任何结点的两棵子树的高度差都不超过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来演示算法的应用。