定义
- 平衡因子 = 左子树高度 - 右子树高度
- 平衡二叉树 = 每个节点左右子树高度差不超过 $1$
操作
-
旋转
- 左旋
let R = self.rself.r = R.lR.l = self
- 右旋
let L = self.lself.l = L.rL.r = self
- 平衡二叉树 旋转の图示 📅 2025-12-24
- 左旋
-
增
- 插入节点,same as 二叉排序树
- 向上回溯,检测平衡因子
- 平衡因子 $0\to\pm1$ $\Rightarrow$ 可能失衡,继续向上检测
- 平衡因子 $\pm1\to0$ $\Rightarrow$ 可以停止回溯
- 平衡因子 $\pm1 \to \pm2$ $\Rightarrow$ 立即旋转一次,然后停止回溯
- LL 旋转
- RR 旋转
- LR 旋转
- RL 旋转
约定
表中 “根节点” 为第一个不平衡的子树的根节点
| 平衡旋转 | 增节点失衡位置 | 操作 |
|---|---|---|
| LL 旋转 | 左子树の左子树 | 根节点右旋 |
| RR 旋转 | 右子树の右子树 | 根节点左旋 |
| LR 旋转 | 左子树の右子树 | 1. 根节点左子树左旋 2. 根节点右旋 |
| RL 旋转 | 右子树の左子树 | 1. 根节点左子树右旋 2. 根节点左旋 |
- 删
- 删除节点 same as 二叉排序树
- 从删除节点向上回溯找到第一个不平衡子节点 $z$ 进行平衡 same as 增
- 继续向上回溯直到根节点
增删の回溯
- 增回溯只需最多一次旋转,就可以停滞回溯
- 删回溯需要一直回溯到根节点