红黑树与AVL树的区别

红黑树 vs AVL树

核心一句话

AVL树更严格平衡,查询更快;红黑树平衡宽松,插入删除更快,工业界更常用。


1. 平衡条件不同

AVL树

  • 左右子树高度差绝对值 ≤ 1
  • 高度严格平衡,树更矮更"紧凑"

红黑树

  1. 节点是红色或黑色
  2. 根节点黑色
  3. 叶子(NIL)黑色
  4. 红节点的子节点必为黑(不能连续红
  5. 任意节点到叶子,黑色节点数量相同(黑高一致
  • 不要求严格高度平衡,最长路径 ≤ 最短路径×2

2. 时间复杂度

  • 查询:AVL < 红黑树
    AVL树更平衡,树高更小,查找更快
  • 插入 / 删除:红黑树 < AVL
    AVL每次失衡最多要旋转4次 ;红黑树最多2次旋转,主要靠变色,开销小

3. 旋转次数

  • AVL:插入最多2次旋转 ,删除最多4次
  • 红黑树:插入最多2次旋转 ,删除最多3次旋转 ,大量操作是变色(不旋转)

4. 适用场景

  • AVL树:查询远多于增删的场景(理论最优,实际用得少)
  • 红黑树 :增删查都频繁,工业界标配
    • C++:std::map / std::set
    • Java:TreeMap / TreeSet
    • Linux内核、epoll

5. 总结

AVL树

优点:查找效率极高

缺点:插入删除旋转多,开销大,实现复杂

红黑树

优点:插入删除快,旋转少,综合性能好,实现相对简单

缺点:查找略慢于AVL