红黑树中的黑色深度?如何知道它是否平衡?
Black depth in Red Black tree? How to know if it is balanced?
我星期二有期中考试,对红黑树的理解有困难。我怎么知道树是平衡的?我知道这与正确数量的黑色节点和黑色深度有关。但我不太明白。我需要知道这一点,因为您将树旋转基于此。如果有人可以提供逐步解释,那就太好了。谢谢!
red-black 树的规则是:
- 根是黑的
- 无节点为黑色(有时省略)
- 红色节点不能有红色child
- 从根到每个叶子的路径包含相同数量的黑色节点
因此,您所指的规则是我假设的最后一条。另一种画树的方式:如果你表示一棵 red-black 树,黑色链接是垂直的,红色链接是水平的,那么所有的叶子最终都在同一层上。
如果一棵树遵循这四个规则,那么它就是一棵有效的 red-black 树。规则 1 和 2 很容易修正。如果树不遵循规则 3,则为红色违规,如果不遵循规则 4,则称为黑色违规。
在下面的示例中,两棵树包含黑色违规,因为不遵守第四条规则。
2,B 2,B
/ \ / \
1,B 0,R 1,B 6,B
/ / \
0,B 4,R 8,R
如果您关心的是确定 red-black 树是否有效,那么也许您应该画一些,看看它们是否遵守规则。需要了解操作的话,可以看一些教程,网上有很多。
无论如何,关于 red-black 树的精彩教程可以在这里找到:http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx
如果您不感兴趣,您可以跳过实现部分,但它通过规则、表示和算法解释了为什么它以这种方式工作。
希望对您有所帮助。
我星期二有期中考试,对红黑树的理解有困难。我怎么知道树是平衡的?我知道这与正确数量的黑色节点和黑色深度有关。但我不太明白。我需要知道这一点,因为您将树旋转基于此。如果有人可以提供逐步解释,那就太好了。谢谢!
red-black 树的规则是:
- 根是黑的
- 无节点为黑色(有时省略)
- 红色节点不能有红色child
- 从根到每个叶子的路径包含相同数量的黑色节点
因此,您所指的规则是我假设的最后一条。另一种画树的方式:如果你表示一棵 red-black 树,黑色链接是垂直的,红色链接是水平的,那么所有的叶子最终都在同一层上。
如果一棵树遵循这四个规则,那么它就是一棵有效的 red-black 树。规则 1 和 2 很容易修正。如果树不遵循规则 3,则为红色违规,如果不遵循规则 4,则称为黑色违规。
在下面的示例中,两棵树包含黑色违规,因为不遵守第四条规则。
2,B 2,B
/ \ / \
1,B 0,R 1,B 6,B
/ / \
0,B 4,R 8,R
如果您关心的是确定 red-black 树是否有效,那么也许您应该画一些,看看它们是否遵守规则。需要了解操作的话,可以看一些教程,网上有很多。
无论如何,关于 red-black 树的精彩教程可以在这里找到:http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx
如果您不感兴趣,您可以跳过实现部分,但它通过规则、表示和算法解释了为什么它以这种方式工作。
希望对您有所帮助。