【问题标题】:red-black tree - construction红黑树 - 构造
【发布时间】:2011-02-04 02:53:59
【问题描述】:

最近在搜索树,遇到了红黑树,困惑的一点是,在rb树中,根节点应该是黑色的就可以了,现在如何判断传入节点是否为红色或黑色。

我浏览了 wiki 文章,但没有找到解决方案。我可能错了,但如果有人能指导我了解确切的材料,我会很高兴。

[编辑] 例如,如果我的键是 {7, 2, 4, 1, 9, 10, 8}

这里 7 是根,它呈现黑色,但 2 呈现什么颜色?我们如何决定呢?我们如何决定其他节点采用什么颜色?

                                  7 - (Black)
                   2                              9
           1                   4        8                    10
        NIL   NIL          NIL  NIL   NIL  NIL            NIL  NIL

我们是否有一个随机折腾来决定节点的颜色是红色还是黑色。还是其他过程。

谢谢。

【问题讨论】:

  • 问题是,你永远不会一次画出整棵树。你总是一个接一个地插入你的节点并更正你的树的其余部分
  • 传入的新节点总是先涂成红色,然后检查树的属性。

标签: creation red-black-tree


【解决方案1】:

看麻省理工开放课件上关于红黑树的讲座。

http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/VideoLectures/

我发现它们非常有帮助。

现在,如果我没记错的话,您总是将新节点插入为黑色节点,然后进行必要的更正(重新绘制和/或旋转)

【讨论】:

  • 是的,我看过视频,但我没有在其中找到答案。谢谢你,因为它让我清楚地理解了其他概念。
  • 实际上,您将每个新节点插入为红色(非黑色)节点,然后继续进行更正。原因是保持以下属性为真:“对于每个节点,从节点到后代叶子的所有路径都包含相同数量的黑色节点。”。如果您将新节点插入为黑色节点,则会增加其中一条路径上黑色节点的数量。
【解决方案2】:

传入节点必须为红色,因为如果将传入节点着色为黑色,则新插入节点的所有叶到根路径的高度将增加一,这将违反每个根到的 RB 树属性叶路径必须包含相同数量的黑色节点。如果您想更深入地了解 RB 树的插入,请参考此内容http://www.youtube.com/watch?v=6QOKk_pcv3U

【讨论】: