【问题标题】:Null child in Red-black tree Java红黑树Java中的空子
【发布时间】:2016-06-26 13:35:21
【问题描述】:

对于红黑二叉搜索树的红黑规则中的第四条规则(不确定它是否只是我书中的第四条),从根到叶子或到空子节点的每条路径都必须包含相同数量的黑色节点,究竟什么是空子节点?据我了解,它就像一个可以添加到节点的潜在孩子,但实际上它并不存在。

......................................................
                            25(black)                                                              
            20(black)                             50(red)                              
    --              --              --                 70(black)              
......................................................

书上说这个案子不符合红黑规则,我不知道为什么。我认为它与一个空孩子有关。因为它看起来满足所有规则。根是黑色的,每个节点不是红色就是黑色,如果一个节点是红色的,它的子节点就是黑色的。从根到叶的每条路径都包含相同数量的黑色节点。那么 null child 究竟是如何让这个 case 不遵循红黑规则的呢?

【问题讨论】:

    标签: java red-black-tree


    【解决方案1】:

    路径25, 50, -- 有 1 个黑色节点 (25);路径25, 50, 70 有 2 个黑色节点(25 和 70)。通常,红黑树的规则不会区分叶子和空子树;我们可以说70 节点也有两个空子节点,它们是叶子节点。

    【讨论】:

    • 可以肯定地说没有孩子或只有一个孩子的节点可以有空孩子,但不能有两个孩子的节点吗?
    • 想想你将如何实现它。每个节点都会有两个对子节点的引用。如果它是树中最底部的节点(我称之为叶子),它将有两个空子节点(您可能会调用这两个叶子而不是它们所引用的节点。取决于您如何定义它)。跨度>
    • @LookAtTheBigPicture 每个节点正好有两个孩子。它们之一或两者都可以为空。
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 2012-08-20
    • 1970-01-01
    • 2010-09-06
    • 2012-11-30
    • 1970-01-01
    • 2010-09-30
    • 2013-06-05
    相关资源
    最近更新 更多