定义:红黑树是一种含有红黑结点并能自平衡的二叉查找树。他满足下面5个性质
性质一:每个结点要么是黑色,要么是红色的。
性质二:根节点是黑色
性质三:每个叶子节点(NIL)是黑色的。
性质四:每个红色结点的两个子节点一定都是黑色。
性质五:任意结点到每个叶子结点的路径都包含数量相同的黑结点。
注:二叉查找树:左节点小于父节点,右节点大于父节点。
红黑树的平衡性
最长边是最短边的2倍
本质上也是用树高控制平衡条件。
调整策略
1.插入调整站在祖父结点看
2.删除调整站在父节点看
3.插入和删除的情况处理一共五种
插入调整的情况
情况一
插入黑色结点必然会发生调整。
插入红色结点可能会进行调整
假设图上的x是新插入的结点
- 站在祖父向下看
- 把它当成一个子树,
- 调整之前每条路径的黑色节点数=调整之后黑色节点数量
处理办法:1和20修改成黑色,15修改成红色(所谓的红色上顶)
情况二
转化之后
只有17这个结点可有可无
确定的:黑色:20,25,1,6,5,13
红色:10,15
处理办法:LL型,大右旋,20调整成红色,15调整成黑色。10调整成红色
**补充:**平衡二叉树
调整的LL、RR、LR、RL
总结插入策略
- 叔叔节点为红色的时候,修改三元组小帽子,改成红黑黑
- 叔叔节点为黑色的时候,参考AVL树的失衡情况,分成LL,RR,LR,RL先参考AVL树的旋转调整策略,然后在修改三元组的颜色,有两种调整策略:红色上浮,红色下沉
- 两大类情况,包含8种小情况
删除调整的前提
- 删除红色结点,不会对红黑树的平衡产生影响
- 度为1的黑色节点,唯一子孩子,一定是红色
- 删除度为1的黑色节点,不会产生删除调整
- 删除度为0的黑色节点,会产生一个双重黑的NIL节点
- 删除调整,就是为了干掉双重黑
情况一
处理办法:brother调整为红色,x减少一重黑色,father增加一重黑色
双重黑节点的兄弟节点是黑色,兄弟节点下面的两个子节点也黑色,父节点增加一重黑色,双重黑节点,分别减少一重黑色。
情况二、
38的右子树转化成下图注蓝色代表黑色
处理办法:brother右(左)旋,51变黑,72变红,转成处理情况三
情况三、
左子树转化成