- 每个节点或者是红色的,或者是黑色的
- 根节点是黑色的 (2节点或3节点)
- 每一个叶子节点(最后的空节点)是黑色的
- 如果一个节点是红色的,那么他的孩子节点都是黑色的
- 黑色节点的右孩子一定是黑色的
- 从任意一个节点到叶子节点,经过的黑色节点是一样的
**
- 红黑树是黑平衡的二叉树。严格意义不是平衡二叉树。
- 最大高度2log n
- 红黑树增加和删除节点的时间复杂度为log n
- 红黑树的添加和删除操作会比AVL要快一些,AVL的查询操作要比红黑树要快一些
- 如果需要经常增删数据,推荐使用红黑树
- 如果数据基本保持不变,推荐使用AVL

2-3树与红黑树的等价关系
红色表示特殊的边,表示其在2-3树中属于同一个3节点
因为用红色边来表示不好维护,所以把这个信息放到b这个红色节点中,来表示它和它的父节点 在2-3树中属于同一个三节点。
:::tips
因为这个信息,红黑树中所有的**红色节点都是向左**倾斜的(是定义出来的,而不是推导出来的)
:::


红黑树添加新元素
添加第一个元素

由于要求根节点必须是黑色的,所以还需要将这个节点改成黑色。
1.左旋转


2.颜色翻转

拆分后他们不再是一个三节点,所以不再是红色。
因为42要继续上浮去跟它的父节点融合,所以要标成红色
3.右旋转


新的根节点要跟原来的根节点颜色一致
又因为现在这三个节点还是融合在一起的,所以42要变成红色
继续颜色翻转,37上浮成红色,12,42断开成黑色
LR
添加元素总结
- 维护的时机:和AVL树一样
- 添加节点后回溯向上维护







