一、一句话
红黑树 ≈ 近似平衡的二叉查找树,保证查找 O(log n)
二、5 条性质(背前 4 条即可)
- 节点是 红 / 黑
- 根是 黑
- 叶子(NIL)是 黑
- 红节点的孩子必须是黑(不能连续红)
- 任意节点到叶子的 黑高相同(保证平衡)
三、vs AVL(面试必问)
| 对比 | 红黑树 | AVL |
|---|---|---|
| 平衡 | 弱平衡(黑高一致) | 严格平衡 |
| 插入/删除 | 更快(旋转少) | 慢 |
| 查询 | 稍慢 | 更快 |
| 应用 | TreeMap、HashMap | 早期数据库 |
插入删除多 → 红黑树;查询多 → AVL
四、旋转(理解就行)
- 左旋:右子变父
- 右旋:左子变父
五、插入(只记结论)
- 新节点默认 红色
- 父节点是黑 → 结束
- 父节点是红 → 看叔叔
- 叔叔红 → 变色 + 上推
- 叔叔黑 → 旋转 + 变色
六、时间复杂度
| 操作 | 时间 |
|---|---|
| 查找 | O(log n) |
| 插入 | O(log n) |
| 删除 | O(log n) |
七、工程应用
- Java
TreeMap/TreeSet - C++
std::map - Linux 调度器
八、要不要手写?
| 面试 | 刷题 | 工作 |
|---|---|---|
| ❌ 不考 | ❌ 不写 | ❌ 不用写 |
只考理论,不考手写。