红黑树——删除、双黑缺陷

首先按照BST常规算法,执行:r = removeat(x,_hot)

x由孩子r接替 //另一孩子记作w(即黑的NULL)

条件1和2依然满足,但3和4不一定 //在原树中,考查x与r

若二者之一为红,则3和4不难满足

双黑缺陷

若x与r均黑double-black

摘除x并代之以r后,全树黑深度不再统一,原B-树中x所属节点下溢

在新树中,考查r的父亲p = r->parent, r的兄弟s = r==p->lc ? p->rc : p->lc

以下分四种情况处理

BB-1:s为黑,且至少有一个红孩子t

3+4重构:t、s、p重命名为a、b、c

r保持黑;a和c染黑;b继承p的原色

如此,红黑树性质在全局得以恢复——删除完成 //zig-zag等类似



BB-2R:s为黑,且两个孩子均为黑;p为红

r保持黑;s转红;p转黑

在对应的B-树中,等效于下溢节点与兄弟合并

红黑树性质在全局得以恢复

失去关键码p之前,上层节点不会继续下溢,合并之前,在p之左或右侧还必有(问号)关键码。必为黑色,有且仅有一个


BB-2B:s为黑,且两个孩子均为黑;p为黑

s转红;r与p保持黑


BB-3:s为红(其孩子均为黑)

zag(p)或zig(p);红s转黑,黑p转红

既然p已转红,接下来绝不会是情况BB-2B,而只能是BB-1或BB-2R


复杂度

红黑树的每一删除操作都可在O(logn)时间内完成

其中,至多做

1.O(logn)次重染色

2.一次“3+4”重构

3.一次单旋

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 0.树0.1 一般树的定义0.2 二叉树的定义 1.查找树ADT 2.查找树的实现2.1 二叉查找树2.2 ...
    王侦阅读 12,098评论 0 3
  • 这个周看算法导论,看到红黑树,看的我云里雾里绕啊。虽然最后看懂了,据我估计,要是过一个星期不看保证忘干净,因此决定...
    充满活力的早晨阅读 6,014评论 0 3
  • 1、红黑树介绍 红黑树又称R-B Tree,全称是Red-Black Tree,它是一种特殊的二叉查找树,红黑树的...
    文哥的学习日记阅读 13,332评论 1 35
  • 最近花了些时间重拾数据结构的基础知识,先尝试了红黑树,花了大半个月的时间研究其原理和实现,下面是学习到的知识和一些...
    hoohack阅读 5,393评论 8 30
  • 之前也没真正理解为什么要和优秀的人待在一起,这些天慢慢地明白了。那些人身上好像有光,让我觉得很舒服很踏实,和他们呆...
    王雨Althea阅读 1,657评论 0 0