我在这里有一个非常简单的问题:红黑树必须按排序顺序吗?我问这是因为维基百科页面右侧的小方块(http://en.wikipedia.org/wiki/Red-black_tree)表示搜索时间是O(log(n));然而,如果树被排序,这只会是真的。另一方面,虽然属性s红黑树必须按排序顺序吗?
2
A
回答
5
红黑树是排序树(整个所有RB树都是排序的二叉树,但并非所有排序后的二叉树都是红黑树的东西)。普通二叉树和红黑树之间的区别在于RB树保证搜索时间将是日志(n),因为它们是平衡的。实质上,它保证节点的层数永远不会超过log (n),保持二进制搜索。
没有平衡的纯二叉树不会总是产生时间复杂度。举例来说,如果我有这样的树:
4
/\
3 6
\
7
\
10
\
12
对于这种不平衡的树,实际的搜索时间几乎是线性的找到12
(最坏情况下的时间复杂度,5个比较)。对于具有一个平衡树至多日志(n)的层,上面的树可以是:
7
/ \
4 10
/\ \
3 6 12
所以找到任何最低层节点将至多3个比较(其适合日志(n)的因为它实际上是向上舍入,小区[日志(6)] = 3)
这里的关键是要记住,层的数量在功能上等价到你在根目录开始时必须进行的比较次数。红黑树通过平衡将层数限制为最小值,而香草,不平衡二叉树不会。
1
红黑树的搜索时间为O(log n),因为它以自然顺序设置它们的节点。
当你做一个节点比较时,理论上你在分支上放弃了一半的选项。
既然你只能“半” log n times
你到一个元素之前,那么您的搜索复杂度是O(log n)
2
红黑树是二叉搜索树。根据二叉搜索树的定义,左侧子元素(以及所有后代)必须小于父代,右侧子代(以及所有后代)必须大于父代。因此有一个命令。
1
红黑树的全部要点是保持树在某种程度上的平衡。如果你放松排序约束,那么保持树平衡是微不足道的,因为你可以把节点放在任何你想要的地方。
相关问题
- 1. 红黑树访问按顺序索引
- 2. MongoDB:索引的顺序和查询顺序必须匹配吗?
- 3. 错误[+2640] TreeBuildCommand:TB命令必须按顺序排列
- 4. 按工作顺序排序Dql吗?
- 5. SortedDictionary是红黑树吗?
- 6. SQL树层次结构顺序按字母顺序排列,但显示为树
- 7. 按顺序排列并按组排序
- 8. 按字母顺序排序,然后按字母顺序排列
- 9. 红宝石数组排序顺序
- 10. 按字母顺序排序
- 11. 按字母顺序排序
- 12. 按字母顺序排序
- 13. 按字母顺序排序
- 14. 排序按字母顺序
- 15. 按字母顺序排序
- 16. 按选择顺序排序
- 17. 按字母顺序排序
- 18. 顺序按升序排列
- 19. 不按顺序排序
- 20. 按顺序排列
- 21. 我可以在红黑树中插入未排序的数据吗?
- 22. 红黑树插入操作对排序值的行为
- 23. 从线性时间的排序阵列构建红黑树
- 24. 按钮必须按特定的顺序发送表单 - jquery
- 25. SQL父子树排序顺序
- 26. 红宝石阵列中的排序哈希按字母顺序
- 27. 在轨道上的红宝石中按字母顺序排序
- 28. 按聚合顺序排列的顺序
- 29. 红黑树,
- 30. 按字母顺序排列的链表不按顺序排列
你是什么意思的排序顺序?所有二进制搜索树都遵循订单 – gtgaxiola