【问题标题】:Do red-black trees have to be in sorted order?红黑树是否必须按排序顺序排列?
【发布时间】:2012-09-16 10:23:17
【问题描述】:

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

【问题讨论】:

  • 排序顺序是什么意思?所有的二叉搜索树都遵循一个顺序

标签: java tree red-black-tree


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

        4
       / \
      3   6
           \
            7
             \
             10
               \
               12
      

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

           7
         /   \
        4    10
       / \     \
      3   6    12
      

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

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

      【讨论】:

      • 是的,很好的解释。当然,提出的问题是“红黑树是否必须按排序顺序排列?”。这有点像用火箭筒杀死苍蝇。不过,+1。
      • @TimBender 好吧,问这个问题意味着他不知道为什么要使用 RB 树。只是澄清它的用途及其存在的原因:) 然而,公平地说,我想我有点忘乎所以。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-10-22
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多