【问题标题】:Black depth in Red Black tree? How to know if it is balanced?红黑树中的黑色深度?如何知道是否平衡?
【发布时间】:2016-05-16 01:14:25
【问题描述】:

我星期二有期中考试,我无法理解红黑树。我怎么知道树是平衡的?我知道这与正确数量的黑色节点和黑色深度有关。但我不太明白。我需要知道这一点,因为您将树旋转基于此。如果有人可以提供逐步的解释,那就太好了。谢谢!

【问题讨论】:

    标签: java data-structures tree red-black-tree tree-balancing


    【解决方案1】:

    红黑树的规则是:

    • 根是黑色的
    • Nil 节点为黑色(有时省略)
    • 红色节点不能有红色子节点
    • 从根到每个叶子的路径包含相同数量的黑色节点

    因此,您所指的规则是我假设的最后一条。绘制树的另一种表达方式:如果您表示一棵红黑树,黑色链接是垂直的,红色链接是水平的,那么所有的叶子最终都在同一层上。

    如果一棵树遵循这四个规则,那么它就是一棵有效的红黑树。规则 1 和 2 很容易解决。如果树不遵循规则 3,则为代码红色违规,如果它不遵循规则 4,则称为黑色违规。

    在下面的例子中,两棵树包含一个黑色违规,因为第四条规则没有得到遵守。

            2,B                   2,B 
    
           /   \                 /   \ 
    
         1,B   0,R           1,B      6,B  
    
                            /        /   \   
    
                           0,B      4,R   8,R
    

    如果您关心的是确定红黑树是否有效,那么也许您应该画一些并查看它们是否遵守规则。如果你需要了解操作,你需要看一些教程,网上有很多。

    无论如何,关于红黑树的精彩教程可以在这里找到:http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx

    如果您不感兴趣,您可以跳过实现部分,但它会通过规则、表示和算法来解释它为什么会这样工作。

    希望这会有所帮助。

    【讨论】:

    • 这确实有帮助。但我仍然不太明白第四条规则的真正含义。我计算黑色节点的数量吗?有什么公式可以用来做这个吗?
    • 不行,你必须走完路径,并在途中数数,然后比较结果。你不知道黑色节点在哪里,所以你需要遍历树来统计它们。
    最近更新 更多