AVL树

定义

AVL树是最早的自平衡二叉搜索树(BST),由Adelson-Velsky和Landis在1962年提出。它通过严格要求左右子树高度差 ≤ 1来保证树的平衡,从而保证所有操作(查找/插入/删除)的时间复杂度为 O(log N)。

核心特性

  • 平衡因子:每个节点的平衡因子 = 左子树高度 - 右子树高度,取值范围为 {-1, 0, 1}
  • 严格平衡:任何节点的左右子树高度差不超过1
  • 旋转操作:插入/删除后可能破坏平衡,需要通过旋转(左旋/右旋/左右旋/右左旋)恢复平衡

与红黑树对比

维度 AVL树 红黑树
平衡严格度 严格(左右子树高度差 ≤1) 较宽松(允许黑高差)
插入/删除旋转次数 较多(可能需要多次旋转) 较少
查找速度 更快(树高更平衡,≤ 1.44log(N+2)) 稍慢(树高≤ 2log(N+1))
适用场景 查找频繁的场景 插入删除频繁的场景(如Java TreeMap)
存储空间 需要存储平衡因子或树高 只需要1位存储颜色(红/黑)

旋转操作

  1. 左旋(Left Rotation):右子树过高时,将当前节点左旋
  2. 右旋(Right Rotation):左子树过高时,将当前节点右旋
  3. 左右旋(Left-Right Rotation):先对左子树左旋,再对当前节点右旋
  4. 右左旋(Right-Left Rotation):先对右子树右旋,再对当前节点左旋

相关概念


Interactive Graph