【问题标题】:Can a red-black tree have a black node with a single black child?红黑树可以有一个黑色节点和一个黑色孩子吗?
【发布时间】:2022-12-10 00:44:48
【问题描述】:

在描述红黑树的删除过程时,Arge 和 Lagoudakis 关注的是要删除的节点为黑色且只有一个黑色子节点的情况(如 CP230 讲义here 的图 16 所示,转载如下):

然而,根据*here(遵循 CLRS)给出的描述,似乎具有单个黑色子节点的节点也将有一个黑色 NIL(叶)节点作为其另一个子节点。这将立即在包含不同数量黑色节点的红黑树中创建根叶路径。从根节点到 NIL 节点的节点比通过子节点的节点少 1。所以在我看来,Arge 和 Lagoudakis 考虑的案例永远不会出现。所以我的问题是:红黑树可以有一个黑色节点和一个黑色孩子吗?

【问题讨论】:

    标签: tree red-black-tree


    【解决方案1】:

    你的分析完全正确:在一棵有效的红黑树中,如果一个节点只有一个子节点,则该子节点不可能是黑色的。甚至第一个提到的节点的颜色是什么都没有关系。您给出的推理保持不变,并且是正确的。

    引用的文件掩盖了红背树是一个二叉树,其中每个节点都有指针——并且它们的顺序很重要(一个是“左”,另一个是“右”)——通过描绘一些边缘垂直,好像没有第二个指针。

    此外,关于该主题的*文章在 Removal: simple cases 部分确认,对于只有一个孩子的节点来说,拥有一个黑人孩子是无效的:

    如果只有一个非 NIL 孩子,它必须是红色孩子,因为如果它是黑色孩子,则要求 4*会强迫第二个黑人非 NIL 孩子。


    *4. 从给定节点到其任何后代 NIL 节点的每条路径都经过相同数量的黑色节点。

    【讨论】:

      【解决方案2】:

      树的根永远是黑色的。没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点)。从一个节点(包括根)到它的任何后代 NULL 节点的每条路径都具有相同数量的黑色节点。

      【讨论】:

      • 这如何回答这个问题?提问者很清楚你写的是什么。
      最近更新 更多