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

时间:2012-09-24 22:30:50

标签: java tree red-black-tree

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

4 个答案:

答案 0 :(得分:5)

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

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

  4
 / \
3   6
     \
      7
       \
       10
         \
         12

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

     7
   /   \
  4    10
 / \     \
3   6    12

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

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

答案 1 :(得分:2)

红黑树是二叉搜索树。根据二叉搜索树的定义,左子(和所有后代)必须小于父子,右子(和所有后代)必须大于父子。因此有一个排序。

答案 2 :(得分:1)

红黑树的搜索时间为O(log n),因为它以自然顺序设置节点。

当您进行节点比较时,理论上在您选择分支时会丢弃一半的选项。

由于在获得一个元素之前只能“半”log n times,因此您的搜索复杂度为O(log n)

答案 3 :(得分:1)

红黑树的全部意义在于保持树在某种程度上保持平衡。如果放宽排序约束,那么保持树平衡是微不足道的,因为你可以将节点放在任何你想要的地方。