【发布时间】:2013-11-30 05:08:54
【问题描述】:
我正在实现如Introduction To Algorithms 3rd Edition 所述的红黑搜索树。
我有一个问题,即在删除没有子节点的节点后,树没有正确重新着色。第 324 页描述了 RB-DELETE 功能。如果一个节点是叶节点,它的子指针指向一个特殊的空节点。
我不明白的是,当这个函数在叶子节点上运行时,它会将空节点分配给x,然后用null的子树替换节点,从而改变null的父指针。最后,它在 null 上运行 fixup 方法。
编辑空节点不应该是非法的吗?还有什么我不明白,为什么它不起作用?
删除前2:
删除2后:
【问题讨论】:
-
我了解 RB 树,但我不太确定你在问什么,你能以图表的形式举个例子吗?
-
i.imgur.com/nnyh8IX.png> 这是删除节点之前的树。要删除的节点是2。 i.imgur.com/EnMULSy.png> 这是在delete 和delete-fixup 函数之后。如果我尝试遍历伪代码,我不明白为什么不应该发生这种情况,但是生成的树是非法的红黑树,因为从根到空节点的路径不包含相同数量的黑色节点。
-
我认为您误解了“删除没有子节点的节点”。所有叶子都有空值(从技术上讲不能删除)并且是黑色的。您正在删除确实有子节点(两个空子节点)的节点 2。请参阅下面的答案。
-
叶子的复数形式是叶子。
标签: data-structures binary-search-tree red-black-tree