【问题标题】:What does "red-black tree" mean in: TreeSet, which stores its elements in a red-black tree, orders its elements based on their values;“红黑树”是什么意思: TreeSet,将其元素存储在红黑树中,根据元素的值对其元素进行排序;
【发布时间】:2016-03-08 05:52:04
【问题描述】:

我正在阅读Java Tutorial Oracle,我遇到了以下声明。

TreeSet 将其元素存储在红黑树中,对其进行排序 元素基于它们的值;

我被“红黑树”这个词弄糊涂了,我做了一个基本的网络搜索,没有找到满意的答案。

【问题讨论】:

  • 维基百科有一个条目 Red-black_tree。并且在第一页(谷歌)上还有一些其他相当不错的条目。很好奇为什么您的搜索没有那么顺利。

标签: java collections set treeset


【解决方案1】:

红黑树是一种自平衡二叉搜索树。自平衡树有多种,如2-3树、AA树、AVL树和红黑树。

当您考虑可能存在非自平衡二叉搜索树的最坏情况时,自平衡树的目的就很明显了。

考虑这种情况:首先将一个整数插入一棵空树(非自平衡)。继续插入整数,每个值都大于前一个值。您最差的演员检索时间将是插入的最后一个元素,时间复杂度为 O(n)。这是因为您必须遍历整个树才能到达所需的元素,就像链表一样。

这比时间复杂度为 O(lg n) 的平衡二叉搜索树差得多。因此有一些方法,例如红黑树,试图确保树是平衡的(意味着每个孩子的权重相同)。

【讨论】:

    【解决方案2】:

    对我来说,第三个搜索结果是https://en.wikipedia.org/wiki/Red%E2%80%93black_tree,这很好地解释了这个概念。

    基本上,它是一种保持二叉树几乎平衡的方法,因此它不依赖于插入顺序而不会退化为链表,同时还保持插入(和删除)成本低。

    【讨论】:

      【解决方案3】:

      1) 每个节点都有红色或黑色,树的根总是黑色。

      2) 没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点,红色需要有黑色父节点)。

      3) 从根到 NIL 节点的每条路径都有相同数量的黑色节点。

      【讨论】:

        猜你喜欢
        • 2017-02-09
        • 2016-09-26
        • 2011-07-03
        • 2011-05-05
        • 2016-05-16
        • 2011-03-17
        • 2010-09-06
        • 2016-08-03
        • 1970-01-01
        相关资源
        最近更新 更多