← Arietids Learn · 交互演示目录

AVL 旋转与删除回溯可视化

按“冲突结点 → 孩子 → 孙子”的方向识别插入四型;删除时再看 P 原 BF、处理方式,以及局部高度是否还要继续向上传导。

对应 DS_C6T:平衡二叉树插入旋转 / 删除回溯

插入:四型旋转

插入只会在自下而上的第一处失衡结点附近调整一次。关键是看 A 到 B、B 到 C 两段方向。

跳到删除回溯

AVL 旋转示意图 当前步骤的二叉树局部结构,展示冲突结点、旋转支点、孙子结点以及 T1 到 T4 子树位置。
判定

旋转

结果

插入失衡四型

从冲突结点开始,连续看“孩子方向、孙子方向”:同侧是单旋,异侧是双旋。

类型 插入方向 处理
LL 左孩子的左子树 右单旋(口诀:右旋插到右子之左)
RR 右孩子的右子树 左单旋(左旋插入左子之右)
LR 左孩子的右子树 先对左孩 RR 左旋,再对冲突结点 LL 右旋
RL 右孩子的左子树 先对右孩 LL 右旋,再对冲突结点 RR 左旋

删除:左子树变矮后的回溯

删除可能一路向上传导。这里固定讨论“删除发生在 P 左子树”,逐一观察 P 原 BF、右孩子形态、旋转后高度是否变矮。

回到插入旋转

AVL 删除回溯示意图 当前步骤展示删除发生在 P 左子树后,P 的平衡因子变化、右孩子形态和是否继续向上回溯。
P 原 BF

处理

回溯

删除发生在 P 左子树:五种回溯情况

删除后左子树变矮一层,先看 P 原来的 BF;若局部高度变矮,就必须继续向上检查。

情况 P 原 BF 处理 是否继续向上
1 0 不调整(BF 变 −1) 高度不变,停
2 +1 不调整(BF 变 0) 高度变矮,继续
3 −1→−2,右孩左子树矮 RR 旋转 高度变矮,继续
4 −1→−2,右孩右子树矮 RL 旋转 高度变矮,继续
5 −1→−2,右孩左右等高 RR 或 RL(RR 简单) 高度不变,停

图中 A 为插入回溯时第一个失衡的冲突结点,B 为高子树孩子,C 为决定四型方向的孙子结点;删除表中的 P 表示当前向上回溯检查到的父结点。