我正在阅读Java Tutorial Oracle,我遇到了以下声明。
TreeSet将其元素存储在一个红黑树中,对它进行排序 基于价值观的要素;
我对“红黑树”这个短语感到困惑,我做了一个基本的网络搜索,并没有找到满意的答案。
答案 0 :(得分:3)
红黑树是一种自平衡二叉搜索树。有几种自平衡树,如2-3棵树,AA树,AVL树和红黑树。
当您考虑可能存在非自平衡二叉搜索树的最坏情况时,自平衡树的目的是显而易见的。
考虑这种情况:首先在空树中插入一个整数(非自平衡)。继续插入整数,每个值大于前一个值。最差的转换检索时间是插入时间复杂度为O(n)的最后一个元素。这是因为您必须遍历整个树才能到达所需的元素,就像链接列表一样。
这比时间复杂度为O(lg n)的平衡二叉搜索树更糟糕。因此,有一些方法,如红黑树,试图确保树是平衡的(意味着每个孩子的重量是相同的)。
答案 1 :(得分:2)
对我来说,第三个搜索结果是https://en.wikipedia.org/wiki/Red%E2%80%93black_tree,这很好地解释了这个概念。
基本上,这是一种保持二叉树几乎平衡的方法,因此不依赖于插入顺序,它不会退化为链表,同时保持插入(和删除)成本低。
答案 2 :(得分:0)
1)每个节点的颜色为红色或黑色,树的根总是黑色。
2)没有两个相邻的红色节点(红色节点不能有红色父节点或红色节点,红色节点不能有黑色父节点)。
3)从根到NIL节点的每条路径都有相同数量的黑色节点。