平衡二叉树(AVL 树)是一种特殊的二叉排序树,由 Adelson-Velsky 和 Landis 提出。它的核心约束是:对树中每一个结点,其左子树高度与右子树高度之差的绝对值不超过 1。
定义结点 $v$ 的平衡因子 BF(v) = h_L(v) − h_R(v),其中 $h_L, h_R$ 分别为左右子树高度。AVL 树要求对所有结点 $|BF(v)| \le 1$。
| 类型 | 触发形状 | 旋转操作 |
|---|---|---|
| LL | BF=+2,且左孩子的 BF ≥ 0 | 对失衡结点右单旋 |
| RR | BF=−2,且右孩子的 BF ≤ 0 | 对失衡结点左单旋 |
| LR | BF=+2,且左孩子的 BF < 0 | 先左后右双旋 |
| RL | BF=−2,且右孩子的 BF > 0 | 先右后左双旋 |
失衡结点 A 的左子树更高,且左孩子 B 的左子树更高(A−B−C 一条左链)。将 B 提为根,A 降为 B 的右孩子,原 B 的右子树变为 A 的左子树。
失衡结点 A 的右子树更高,且右孩子 B 的右子树更高(A−B−C 右链)。将 B 提为根,A 降为 B 的左孩子。
失衡 A 的左孩子 B 的右子树更高(插入到 B 的右子树)。先对 B 左单旋,再对 A 右单旋。
失衡 A 的右孩子 B 的左子树更高。先对 B 右单旋,再对 A 左单旋。
依次插入 3, 2, 1, 4, 5, 6, 7,观察旋转如何维持平衡:
最终 AVL 树:
| 要点 | 结论 |
|---|---|
| 平衡条件 | 所有结点 $|BF| \le 1$ |
| 四种旋转 | LL 右单旋 / RR 左单旋 / LR 双旋 / RL 双旋 |
| 时间复杂度 | 查找/插入/删除均为 $O(\log n)$ |
| 高度上界 | 约 $1.44\log_2(n+2)$ |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。