【问题标题】:How to know if a tree is colorable如何知道一棵树是否可着色
【发布时间】:2018-07-03 21:20:10
【问题描述】:

我不明白为什么下面的 RB 树是不可着色的。

我认为唯一的要求是:

从根到最远叶子的路径不超过从根到最近叶子的路径的两倍。

但是在图片中你可以看到最短路径(橙色)是2,最长路径(蓝色)是4,这意味着它应该按照上面的规则着色。

【问题讨论】:

    标签: tree binary-tree binary-search-tree red-black-tree


    【解决方案1】:

    确实是可着色的。红黑树必须始终遵循以下规则:

    • 每个节点都有红色或黑色。

    • 树的根总是黑色的。

    • 没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点)。

    • 从根节点到 NULL 节点的每条路径都有相同数量的黑色节点。

    树不能着色,因为 2-blue 和 3-blue 都应该是红色的,这违反了 3 规则。

    从根到最远叶子的路径不超过两倍 只要从根到最近的叶子的路径。

    这并不完全是一个要求,而是 RB 树的一个通用属性。跳过数学证明,考虑一棵树,其中一个分支上只有黑色节点,而在另一个分支上,红色和黑色节点交替出现。在这种情况下,如果不是这样,至少违反了上述规则中的一项,那么您就有最大的不平衡。

    理论上,RB 树中有两种高度:

    • 黑色高度,这是树中所有分支共有的(否则违反 4 规则)
    • “总高度”(不是现成术语),即从根到 NIL 的单条路径上红色节点 + 黑色节点的最大数量。

    【讨论】:

    • 从根到 NULL 节点的每条路径都有相同数量的黑色节点 - 在您的示例中不遵守此规则。你在根目录上有 bh(1) 和 bh(2)
    • 哎呀。谢谢,没注意
    【解决方案2】:

    我认为您不必计算 NIL。这样最短路径是 1,最长路径是 3,这意味着你引用的规则是适用的,因为从根到最近的叶子的路径的两倍是 1*2 和 3(实际最长的路径)更大 => 不是可着色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多