红黑树简易理解方法(用作记录)

在线操作红黑树的查找,添加、删除操作:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
转知乎的一篇理解:
https://zhuanlan.zhihu.com/p/22800206

以下是原作者内容:
红黑树也是一颗二叉排序树,节点的删除也是分为3种情况即,将要删除的节点没有子节点,将要删除的节点下有一个子节点,将要删除的节点下有两个子节点。有不了解的可以参考我们前面介绍二叉搜索树的文章,这里不再赘述。我们主要介绍各种不同情况下节点的修复是怎样操作的。在介绍之前我们再次回顾一下红黑树的5个特性,这非常重要,因为删除节点后,很可能会破坏这5个特性,我们的修复操作就是使它重新满足这5个特性。

所有节点都是红色或者黑色
根节点为黑色
所有的 NULL 叶子节点都是黑色
如果该节点是红色的,那么该节点的子节点一定都是黑色
所有的 NULL 节点到根节点的路径上的黑色节点数量一定是相同的
下面我们开始讨论修复操作(下面的叶子节点都是指非NULL的叶子节点):

A. 删除的是叶子节点且该叶子节点是红色的 —> 无需修复,因为它不会破坏红黑树的5个特性

B. 删除的是叶子节点且该叶子节点是黑色的 —> 很明显会破坏特性5,需要修复。

C. 删除的节点(为了便于叙述我们将其称为P)下面有一个子节点 S,对于这种情况我们通过 将P和S的值交换的方式,巧妙的将删除P变为删除S,S是叶子节点,这样C这种情况就会转 换为A, B这两种情况:

C1: P为黑色,S为红色 —> 对应 A 这种情况

C2: P为黑色或红色,S为黑色 — > 对应 B 这种情况

D. 删除的节点有两个子节点,对于这种情况,我们通过将P和它的后继节点N的值交换的方 式,将删除节点P转换为删除后继节点N,而后继节点只可能是以下两种情况:

D1: N是叶子节点 — > 对应情况 A 或 B

D2: N有一个子节点 ---- > 对应情况 C

所以通过上面的分析我们发现,红黑树节点删除后的修复操作都可以转换为 A 或 B这两种情况,而A不需要修复,所以我们只需要研究B这种情况如何修复就行了。

下面我们讨论如何修复B中情况:
红黑树简易理解方法(用作记录)_第1张图片
红黑树简易理解方法(用作记录)_第2张图片

你可能感兴趣的:(数据结构)