红黑树删除详解

Posted 武氏康大集团

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了红黑树删除详解相关的知识,希望对你有一定的参考价值。

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

性质1. 结点是红色或黑色。 

性质2. 根结点是黑色。 

性质3.所有叶子都是黑色。(叶子是NIL结点) 

性质4. 每个红色结点的两个子结点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色结点)

性质5.. 从任一节结点其每个叶子的所有路径都包含相同数目的黑色结点。

下面我们开始讨论修复操作(下面的叶子节点都是指非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中情况

红黑树删除详解


以上是关于红黑树删除详解的主要内容,如果未能解决你的问题,请参考以下文章

红黑树删除详解

红黑树的删除操作详解

数据结构 - 红黑树(Red Black Tree)插入详解与实现(Java)

红黑树详解

红黑树规则详解(图文)

C++红黑树详解并封装实现map和set