【问题标题】:Prove that a red-black tree remains valid after turning a set S of red nodes black [closed]证明在将一组红色节点变为黑色后,红黑树仍然有效[关闭]
【发布时间】:2019-03-22 17:13:50
【问题描述】:

我目前正在为以下问题绞尽脑汁: 证明,在红黑树 T 中,如果从根到叶的每条路径都包含 至少有一个红色节点,那么我们可以在 T 中选择一组红色节点来着色黑色,使得 T 仍然是一个有效的红黑树,并且黑色高度增加一。

任何人都有关于如何解决这个问题的任何提示,我什至开始迷路

【问题讨论】:

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


    【解决方案1】:

    想到它的简单方法是将红色节点向上推一棵树,然后再次将根变为黑色。

    想象一棵树,如下所示:

           B
      R        B
     B   B  R  B
    B B B B B B R R
    

    如果每条路径上都有一个红色节点,那么将至少有一个黑色节点和两个红色子节点。如果您在发生这种情况的每个位置将红色节点向上推,从底部开始最终您会将红色节点推到树根,此时您可以翻转颜色并且树高增加一。

    此外,如果您的配置是整个级别为红色,则该级别的所有节点都可以翻转,而无需更改树属性,并且高度再次增加了 1。

    如果某些路径有多个红色节点,那就有点棘手了,在这种情况下,您需要从该路径中最顶部的红色节点开始工作,并从另一个分支推送一个红色节点以匹配它。

    【讨论】:

    • 谢谢,“如果每条路径上都有一个红色节点,那么至少会有一个黑色节点和两个红色子节点。”真是大开眼界
    最近更新 更多