红黑树 vs AVL树
核心一句话
AVL树更严格平衡,查询更快;红黑树平衡宽松,插入删除更快,工业界更常用。
1. 平衡条件不同
AVL树
- 左右子树高度差绝对值 ≤ 1
- 高度严格平衡,树更矮更"紧凑"
红黑树
- 节点是红色或黑色
- 根节点黑色
- 叶子(NIL)黑色
- 红节点的子节点必为黑(不能连续红)
- 任意节点到叶子,黑色节点数量相同(黑高一致)
- 不要求严格高度平衡,最长路径 ≤ 最短路径×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
- C++:
5. 总结
AVL树
优点:查找效率极高
缺点:插入删除旋转多,开销大,实现复杂
红黑树
优点:插入删除快,旋转少,综合性能好,实现相对简单
缺点:查找略慢于AVL