定义

定义 平衡方法
AVL树 一种严格自平衡二叉搜索树(BST) 节点的左右子树高度差<=1
红黑树 一种弱平衡的自平衡BST 节点染色(红/黑),保证从根到叶子每条路径黑色节点数量相同,并不严格要求高度差<=1

平衡策略

  • AVL树

    • 高度严格平衡
    • 插入/删除节点后,如果高度差>1,需要通过单旋转或双旋转来恢复平衡
    • 优点:查找/删除效率非常高,平均复杂度O(logn)
  • 红黑树

    • 高度弱平衡(通过颜色约束维持)
    • 每条从根到叶子的路径黑色节点数相同(黑高相等),并不能有两个连续红色节点
    • 插入/删除时通过变色+左右旋转调整
    • 优点:插入/删除效率较稳定,旋转次数少

性能对比

性能指标 AVL树 红黑树
查找 高速,平均O(logn),比红黑树略快 较快,O(logn),查找略慢于AVL树
插入/删除 平衡严格,旋转次数多->相对慢 平衡较松,旋转次数少->插入/删除快
空间开销 每个节点存储高度信息 每个节点存储颜色信息(1 bit)
高度上界 ≈1.44*log2(n)log_2(n) <=2*log2(n+1)log_2(n+1)->稍高一些

使用场景对比

特点 AVL树适用 红黑树适用
查找频率 数据查找频繁、少量更新 不适合更新频繁场景
更新频率 不适合,因为旋转多 更新频繁场景优选,如Java TreeMap、TreeSet
内存开销 略大(存高度信息) 略小(存颜色位)
实用性 学术研究居多 工业级应用广泛(Lunix内核,Java集合、C++STLmap/set)

AVL树:严格平衡->查找快,更新慢
红黑树:弱平衡->查找稍慢,更新快->工业界应用更广泛