红黑树概念:
1 节点是红色或者黑色
2 根节点是黑色的
3红色的节点的孩子必须是黑色的 也就是红节点下的孩子节点必须是黑色的
4每一个从根节点到叶子节点的黑色节点数量都必须一致
5叶子节点是黑色的
红黑树主要在于添加和删除的各种情况
添加节点
默认添加节点为红色节点 那么就会出现双红缺陷 有两个红色的连着的节点 这是不合定义的 需要做调整
第一种情况:叔叔节点是红色的 那么实际上是出线了上溢的情况 那么要做相应处理
这种情况双红缺陷会往上蔓延 至多达到树根 那就是logn的复杂度的重新染色
不过结构的改变至多常数级别
第二种情况:叔叔节点是黑色的
这种情况不会发生向上蔓延 做一次结构调整就ok了!
删除 一共四种情况 默认删除P到1叶子节点的节点 也就是N下面的节点 显示的是已经删除的
第一种分类 兄弟节点S是黑色的
(1)兄弟S的孩子是红色的
做一次旋转和变色就解决了 S顶替P Sr做顶替S操作 一次解决 没有其他情况
(2)兄弟S的爸爸节点P是红色的
把父亲节点变黑 S节点变红 一次解决 over!
(3)父亲节点是黑色的 也就是全黑可以这么理解
双黑缺陷向上蔓延 但是有S红节点可以利用
第二种分类
兄弟S节点是红色的
双黑缺陷没有解决 向上蔓延 不过出现了P红色节点 可以利用所以只会变成(1)或者(2)这两总情况