红黑树删除未知行为

时间:2018-12-07 07:46:06

标签: algorithm data-structures tree red-black-tree tree-balancing

我在红黑树上输入了几个数字。 (41; 38; 31; 12; 19; 8)删除8和12(第一个屏幕截图)后,进入第二个屏幕截图的类型。我不明白为什么31号变成红色。请帮我吗?如果可以的话,请提及与此有关的案件。 谢谢!

1 个答案:

答案 0 :(得分:0)

如果您在Wikipedia上查看了删除算法的说明,则可以将其节点命名映射到树上,如下所示:

M = 0012,要删除的黑色节点
C =低于0012的NIL叶子(始终将NIL视为黑色)

本文继续介绍您的实际情况:

  

复杂的情况是 M C 均为黑色。 [...]我们首先将 M 替换为其子元素 C 。 [...]我们将重新标记这个孩子 C (在新位置) N ,及其兄弟姐妹(其新父母的另一个孩子) S [...]我们还将对 N 的新父级 S L P > 用于 S 的左子,而 S R 用于 S 的右子< / p>

因此,现在我们已经在移除之后,但在重新着色之前:

enter image description here

P = 0019(红色)
N =一个NIL叶子,左子元素为0019
S = 0031,0019的右子对象

此说明标识了几种情况,其中的情况如下:

  

情况4:S S 的孩子是黑色的,而 P 是红色的。在这种情况下,我们只需交换 S P 的颜色。

解释这种颜色交换的原因:

  

这不会影响通过 S 的路径上的黑色节点的数量,但会确实将通过 N 的路径上的黑色节点的数量增加1,查找这些路径上已删除的黑色节点。

回想一下,在红黑树中必须保持不变(property 5):

  

从给定节点到其后代NIL节点的每条路径都包含相同数量的黑色节点。

如果省略了上面的颜色交换,则将违反该不变式。