AVL 树可视化:动态平衡与旋转过程演示

521H:4 BF:0298H:3 BF:0114H:2 BF:074H:1 BF:0250H:1 BF:0335H:2 BF:0319H:1 BF:0481H:1 BF:0824H:3 BF:1527H:2 BF:-1722H:1 BF:0922H:1 BF:0
已使用随机方法初始化包含12个节点的树

AVL 树(Adelson-Velsky and Landis Tree)是一种自平衡二叉搜索树。它在保留 BST 有序性的同时,额外维护每个节点的平衡因子 BF = height(left) - height(right),并要求 BF ∈ [-1, 1]

这意味着:

  • 查找、插入、删除在大多数场景都能稳定保持 O(log n)
  • 不会像普通 BST 那样在顺序插入时快速退化成链表;
  • 每次插入/删除后,需要沿路径回溯并在必要时做旋转恢复平衡。

动态平衡操作(重点)

页面重点展示 AVL 的再平衡过程,尤其是四种旋转:

1. LL 旋转(右旋)

当某节点左子树过高,且其左孩子的左侧更高时触发。通过一次右旋,把失衡节点下沉、左孩子上升。

2. RR 旋转(左旋)

当某节点右子树过高,且其右孩子的右侧更高时触发。通过一次左旋恢复平衡。

3. LR 旋转(先左后右)

当某节点左子树过高,但更高路径出现在“左孩子的右侧”时触发。需要先对左孩子左旋,再对失衡节点右旋。

4. RL 旋转(先右后左)

当某节点右子树过高,但更高路径出现在“右孩子的左侧”时触发。需要先对右孩子右旋,再对失衡节点左旋。

本页面会逐步展示:

  • 访问路径与失衡节点定位;
  • 旋转前后关键节点关系;
  • 子树挂接变化与高度/BF 更新;
  • 操作完成后的最终树结构。

如何更好地观察平衡过程

  • 使用“顺序初始化”或连续插入单调数据,更容易触发旋转;
  • 适当降低速度滑块,便于看清每一步变换;
  • 用“重放上次操作”反复观察同一次旋转细节。