红黑树也是一种自平衡二叉搜索树数据结构
之前也叫作平衡二叉B树post
红黑树必须知足一下5个性质性能
不是3d
知足code
不知足cdn
红黑树和4阶B树具备等价性blog
红黑树的Black节点个数与4阶B树的节点总数相等继承
1 <= x <= 3
。Red
(这样能更快的知足红黑树的性质)。Black
。全部的添加状况以下图所示递归
black
的状况,直接添加,无需特殊处理。(4种状况)Red
的状况。有如下几种状况(8种)Black
时RR/LL状况
LR\RL状况
Black
,grand染成Red
。(染色的意义是进行后面的双旋转操做后本身成为parent节点,规定partent的节点为黑色,parent的子节点(原来的parent和grand)为Red。)。Red
时当uncle为Red的时候,红黑树对比4阶B树会发生上溢操做。
Black
。(为了单独为一个节点作准备)。在B树中真正删除的元素都在叶子节点(若不是叶子节点,其前驱或者后继都为叶子节点,因此在替换后删除的仍然为叶子节点。 若是删除的是20,前驱15仍然是叶子节点)。
Red
节点的时候Black
节点的时候当拥有2个Red
子节点的black节点
当拥有1个Red
子节点的black节点
Red
Black
Black
叶子节点
若是Black叶子节点的兄弟节点为Black
Black
(10的字节点)。Red
、parent节点染Black
既可。
Black
, 会致使下溢,只须要把parent当作被删除的节点处理既可(递归)实验可得 递归次数小于三次。(下图中若是40的超级节点上只有40 没有20和70,那会发生下溢,只须要将40当作被删除的节点既可)。若是Black叶子节点的兄弟节点为Red
原理: 此时兄弟节点是20 。 咱们要将30变为45的兄弟节点。而后在进行兄弟节点为black操做
将兄弟节点染成Black
,parent染成Red
,再进行旋转。
回到了兄弟节点为black的状况。
红黑树是一种弱平衡。黑高度平衡,因为是黑高度平衡 和红黑树性质。因此最大路径小于最短路径的2倍
红黑树的最大高度是,依然是O(logn)级别。
搜索:O(logn)
添加:O(logn),O(1)次旋转操做
删除:O(logn),O(1)次旋转操做
AVL
平衡标准比较严格:每一个左右子树高度差1。
最大高度是(100W个节点,AVL最大高度28)。
搜索、添加、删除都是O(logn)复杂度,其中添加须要O(1)次旋转调整、删除最多须要O(logn)次调整。
红黑树
平衡标准比较松:没有一条路径大于其余路径的二倍。
最大高度是(100W个节点,红黑树最大高度40)。
搜索、添加、删除都是O(logn)复杂度,其中添加删除都是O(1)次旋转调整。
搜索的次数远大于插入和删除、选择AVL树;
搜索、插入、删除的操做差很少,选择红黑树;
相对于AVL,红黑树牺牲了部分平衡性能换取插入/删除时的少许旋转操做。总体性能优于AVL树
红黑树的平均统计性能优于AVL树,实际应用更多选择红黑树。