红黑树中的哨兵节点的好处?

时间:2017-08-17 15:28:05

标签: algorithm data-structures tree binary-search-tree red-black-tree

我创建了一个双向链表,并且前哨节点的好处很明显 - 在列表边界没有空检查或特殊情况。

现在我正在写一棵红黑树,并试图弄清楚这个概念是否有任何好处。

我的实施基于 this article 中的最后两个功能  (自上而下插入/删除)。作者使用了一个"虚拟树根"或者"头部"避免根插入/删除算法的根特殊情况。作者的头节点的范围是函数本身 - 似乎是因为它的用处有限。

我遇到的另一篇文章提到使用头顶上的永久根作为"结束"用于迭代。这看起来很有趣,但我尝试过,并且看不到使用NULL作为结束迭代器的任何真正好处。我还发现了几篇使用共享标记来表示所有空叶节点的文章,但这似乎比第一种情况更无意义。

任何人都可以详细说明一个哨兵节点在红黑树中的用途吗?

1 个答案:

答案 0 :(得分:0)

红黑树实现几乎总是为所有叶子使用一个黑色哨兵。

当你可以检查颜色而不先检查null时,它会保存很多空检查。

当然,这在使用父指针的实现中不起作用。在这些实现中,叶子哨兵通常不被使用,因为你需要为每个叶子位置分配不同的哨兵,这会浪费很多记忆。