AVL 树动画演示

每个节点的左右高度差最多 1,超了就旋转回来。

键盘:← → 单步 ·空格 播放/暂停 · R 重置 ·Home/End 到两端

AVL 树给每个节点加了个硬性 KPI:左右子树高度差不能超过 1,超了立刻用旋转把局部结构拧回来。这一页按 LL、RR、LR、RL 四种失衡形态各演示一段,平衡因子直接标在每个节点下方,失衡点染成红色;旋转拆成「认人、重连边、重算高度」三步,你能看清到底是哪三根指针在动。

为什么旋转几下就够、不必重建整棵树:旋转前后中序顺序纹丝不动,大小关系天然守恒,要修的只有形状。一次或两次旋转就能把失衡子树的高度和恢复到失衡前的值,祖先们因此完全不用人管——这就是 AVL 的「局部手术、全局止血」。真正要付的代价在插入路径上:回溯更新每个祖先的高度,以及写多读少场景里频繁的旋转,这也是工程上红黑树更愿意牺牲一点平衡换旋转次数的原因。

AVL 树演示怎么用

  • 选形态:四档按钮分别触发左左、右右、左右、右左四种失衡,每档都配一条必定产生该形态的最小插入序列。
  • 盯旋转:失衡出现后先看红点定位,再逐步看三节点如何换位;LR 与 RL 是两次单旋转的组合,页面上会先摆形态再转根。
  • 读染色:节点下方的 bf 值与颜色对应:普通蓝边在允许范围,红色节点就是绝对值大于 1 的失衡点。
  • 对末态:每一步都保持中序递增可查,末步整树平衡因子的绝对值全部不超过一,可直接拿来对照手写实现。

常见问题

平衡因子为什么允许是 ±1 而不是必须 0?

要求全为 0 只有满二叉树能满足,几乎每次插入都要大动干戈。放宽到 ±1 后,一棵高度 h 的树允许左右子树差一层,既能把高度锁在 O(log n),又让旋转频率降到常数级——这是精算过的折中。

左右偏不是镜像吗,为什么要分成四种情况?

LL 与 RR 互为镜像,各一次旋转就够;LR、RL 的「拐角」形态直接转根会把拐角甩到错误一侧,所以要先对偏斜方向相反的子节点转一次,把它变成 LL 或 RR 再动根。页面上每种形态各占一档,看完四条就齐了。

删除节点时 AVL 怎么处理?

删除沿 BST 规则摘点,再对退场路径自底向上重算平衡因子,发现失衡同样用这四种旋转回补,必要时一路转到根。本页聚焦插入触发的旋转,是删除情形的完整版,步骤偏多就不铺开了。

演示编号 C02无需安装,手机端同样可用按 Ctrl + K 搜工具与演示

顺手能用上的工具