为什么RB-Tree不能成为一个列表?

时间:2010-04-26 12:08:39

标签: algorithm data-structures red-black-tree

我对rb-tree有问题。根据维基百科,rb-tree需要遵循以下内容:

  1. 节点为红色或黑色。
  2. 根是黑色的。 (此规则用于某些定义而非其他定义。由于根始终可以从红色变为黑色,但反之亦然,反之亦然,此规则对分析几乎没有影响。)
  3. 所有叶子都是黑色的。
  4. 每个红色节点的两个孩子都是黑色的。
  5. 从给定节点到其任何后代叶子的每个简单路径都包含相同数量的黑色节点。
  6. 我们知道,rb-tree需要平衡并且高度为O(log(n))。 但是,如果我们插入一系列不断增加的数字(1,2,3,4,5 ......),理论上我们会得到一个看起来像列表的树,并且它的高度为O(n)节点黑色,与上面提到的rb-tree属性不矛盾。那么,我哪里错了?

    感谢。

2 个答案:

答案 0 :(得分:3)

the article中进一步向下:

  

插入从添加节点开始   二进制搜索树插入   并将其涂成红色

答案 1 :(得分:3)

您的示例与属性编号5相矛盾,因此它不是有效的红黑树。

我们拥有的树是:

b(1, nil, b(2, nil, b(3, nil, b(4, nil, b(5, nil, nil)))))

所以要到达最后两个叶子(节点5的子节点),我们必须访问五个黑色节点(由每个b表示),以到达节点{{下的叶子1}}我们必须访问四个黑色节点等。这意味着从根到这些后代的一些简单路径包含不同数量的黑色节点,这使属性5无效。