红黑树是否必须按顺序排列?

Joe*_*lin 2 java tree red-black-tree

我在这里有一个非常简单的问题:红黑树是否必须按顺序排列?我问这个是因为维基百科页面右侧的小方框(http://en.wikipedia.org/wiki/Red-black_tree)说搜索时间是O(log(n)); 但是,如果树被分类,这不会是真的.另一方面,属性s

Bri*_*ian 5

红黑树是排序树(整个所有RB树都是排序的二叉树,但不是所有排序的二叉树都是红黑树的东西).普通二叉树和红黑树之间的区别在于RB树保证搜索时间将为log 2(n),因为它们是平衡的.实质上,它保证n个节点的层数永远不会超过log 2(n),从而保持二进制搜索.

没有平衡的普通二叉树不会总是产生log 2(n)时间复杂度.例如,如果我有这样的树:

  4
 / \
3   6
     \
      7
       \
       10
         \
         12
Run Code Online (Sandbox Code Playgroud)

对于这种不平衡树,实际搜索时间几乎是线性的12(最坏情况时间复杂度,5次比较).对于最多具有log 2(n)层的平衡树,上面的树可以是:

     7
   /   \
  4    10
 / \     \
3   6    12
Run Code Online (Sandbox Code Playgroud)

因此,找到任何最低层节点最多需要进行3次比较(这符合log 2(n),因为它实际上是向上舍入的,ceil [log 2(6)] = 3)

这里的关键是要记住,层数在功能上等同于从根开始时必须进行的比较次数.红黑树通过平衡将层数限制到最低限度,而香草,非平衡二叉树则不会.