我在这里有一个非常简单的问题:红黑树是否必须按顺序排列?我问这个是因为维基百科页面右侧的小方框(http://en.wikipedia.org/wiki/Red-black_tree)说搜索时间是O(log(n));但是,如果树被分类,这不会是真的。另一方面,属性s
答案 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)
红黑树的全部意义在于保持树在某种程度上保持平衡。如果放宽排序约束,那么保持树平衡是微不足道的,因为你可以将节点放在任何你想要的地方。