Algorithm 为什么可以';这不是一张单子吗?

Algorithm 为什么可以';这不是一张单子吗?,algorithm,data-structures,red-black-tree,Algorithm,Data Structures,Red Black Tree,我对rb树有问题。根据维基百科,rb树需要遵循以下要求: 节点为红色或黑色 根是黑色的。(此规则在某些定义中使用,而在其他定义中不使用。由于根始终可以从红色更改为黑色,但不一定从红色更改为黑色,因此此规则对分析几乎没有影响。) 所有的叶子都是黑色的 每个红色节点的两个子节点都是黑色的 从给定节点到其任何子代叶的每个简单路径都包含相同数量的黑色节点 正如我们所知,rb树需要平衡,并且具有O(log(n))的高度。 但是,如果我们插入一系列递增的数字(1,2,3,4,5…),理论上我们会得到一棵树,

我对rb树有问题。根据维基百科,rb树需要遵循以下要求:

  • 节点为红色或黑色
  • 根是黑色的。(此规则在某些定义中使用,而在其他定义中不使用。由于根始终可以从红色更改为黑色,但不一定从红色更改为黑色,因此此规则对分析几乎没有影响。)
  • 所有的叶子都是黑色的
  • 每个红色节点的两个子节点都是黑色的
  • 从给定节点到其任何子代叶的每个简单路径都包含相同数量的黑色节点
  • 正如我们所知,rb树需要平衡,并且具有O(log(n))的高度。 但是,如果我们插入一系列递增的数字(1,2,3,4,5…),理论上我们会得到一棵树,它看起来像一个列表,高度为O(n),所有节点都是黑色的,这与上面提到的rb树属性并不矛盾。那么,我错在哪里

    谢谢。

    再往下一点:

    插入从添加节点开始 类似于二叉搜索树插入 并将其染成红色


    您的示例与属性编号5冲突,因此它不是有效的红黑树

    我们的树是:

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

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

    对于算法考试来说,这是一个很好的问题:-)属性#5说“到它的任何子体叶子”-这棵树只有一片叶子。@Neil不,叶子是“nil”节点,所以在我的书中有6个。@fortran,在我读过的每一本数据结构书中,叶是一个没有子节点的节点。@Neil引用了维基百科的同一个条目,“红黑树的叶节点不包含数据”。它们只是虚拟的黑色节点。@Neil那么我们能从中扣除什么呢?根据您的定义,我仍然可以看到六片叶子和五个带子节点的节点。@Neil,新插入的红色节点可能会在算法运行期间重新绘制为黑色。所以它的颜色并不重要。