1. 平衡二叉树基础概念解析
平衡二叉树(Balanced Binary Tree)是计算机科学中一种重要的数据结构,它要求任意节点的左右子树高度差不超过1。这个特性保证了树的查询效率始终维持在O(log n)级别,避免了普通二叉树可能退化成链表的最坏情况。
在实际应用中,平衡二叉树广泛用于数据库索引、内存管理等场景。比如Linux内核的进程调度就使用了红黑树(一种自平衡二叉查找树)来管理进程控制块。理解平衡二叉树的判定方法,是掌握高级数据结构的基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. LeetCode 110题题目分析
LeetCode 110题的完整描述是:给定一个二叉树,判断它是否是高度平衡的二叉树。题目给出的函数签名如下:
python复制def isBalanced(root: TreeNode) -> bool:
示例1:
输入:root = [3,9,20,null,null,15,7]
输出:true
示例2:
输入:root = [1,2,2,3,3,null,null,4,4]
输出:false
3. 自底向上解法原理剖析
3.1 基本思路
自底向上(Bottom-up)是一种经典的递归策略,与自顶向下(Top-down)相对。它的核心思想是:
- 先递归处理子问题
- 利用子问题的解构建当前问题的解
- 将结果向上传递
对于平衡二叉树的判定:
- 自顶向下:先检查当前节点是否平衡,再递归检查左右子树
- 自底向上:先递归检查左右子树,再根据子树信息判断当前节点
3.2 算法时间复杂度对比
| 方法 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| 自顶向下 | O(n^2) | O(n) |
| 自底向上 | O(n) | O(n) |
自底向上方法的优势在于它通过后序遍历,每个节点只被访问一次,避免了重复计算高度。
4. 自底向上解法代码实现
4.1 Python实现
python复制def isBalanced(root: TreeNode) -> bool:
def height(node):
if not node:
return 0
left_height = height(node.left)
right_height = height(node.right)
if left_height == -1 or right_height == -1 or abs(left_height - right_height) > 1:
return -1
return max(left_height, right_height) + 1
return height(root) != -1
4.2 关键代码解析
- 定义嵌套函数
height计算子树高度 - 递归终止条件:空节点高度为0
- 递归获取左右子树高度
- 不平衡情况判断:
- 任一子树不平衡(返回-1)
- 当前节点左右高度差>1
- 平衡情况下返回真实高度
5. 算法优化与边界处理
5.1 提前终止优化
当发现任一子树不平衡时,可以立即返回-1,避免不必要的计算。这是通过检查left_height和right_height是否为-1实现的。
5.2 边界条件处理
特殊测试用例需要考虑:
- 空树(返回true)
- 单节点树(返回true)
- 完全不平衡的链式树
- 大规模数据测试(验证算法效率)
6. 相关题目拓展
掌握平衡二叉树判定后,可以尝试以下LeetCode题目:
-
- 将有序数组转换为二叉搜索树
-
- 将二叉搜索树变平衡
- 面试题 04.04. 检查平衡性
7. 实际工程应用
平衡二叉树在工程中的应用远比算法题复杂。实际场景中还需要考虑:
- 动态平衡(插入/删除时的旋转操作)
- 内存占用优化
- 并发访问控制
- 持久化存储
比如在数据库索引中,B树/B+树就是平衡树的多路扩展,需要处理磁盘I/O优化等问题。
