【发布时间】:2010-10-30 05:24:11
【问题描述】:
我试图理解什么是排序树、二叉树和 avl 和 and and ... 我仍然不确定,是什么让排序树排序?在排序的树中搜索和在未排序的树中搜索之间的复杂性(Big-Oh)是多少?希望你能帮助我。
【问题讨论】:
标签: sorting tree binary-tree
我试图理解什么是排序树、二叉树和 avl 和 and and ... 我仍然不确定,是什么让排序树排序?在排序的树中搜索和在未排序的树中搜索之间的复杂性(Big-Oh)是多少?希望你能帮助我。
【问题讨论】:
标签: sorting tree binary-tree
二叉搜索树是一种“树”结构,其中每个节点都有两个子节点。
左节点都具有小于其父节点的属性,而右节点都具有大于其父节点的属性。
二叉树的有趣之处在于,当树正确排序时,我们可以在 O(log n) 中搜索一个值。例如,在 LinkedList 中进行相同的搜索将为我们提供 O(n) 的搜索速度。
学习数据结构的最佳方法是花一天时间在谷歌上搜索和阅读维基百科文章。
这可能会让您入门
http://en.wikipedia.org/wiki/Binary_search_tree
【讨论】:
存在两种主要类型的二叉树,平衡的和不平衡的。平衡树旨在尽可能保持树的高度(高度 = 根与最远的子节点之间的节点数量)。平衡树有几种类型的算法,其中最著名的两种是 AVL- 和 RedBlack-trees。 AVL 和 RedBlack 树上的插入/删除/搜索操作的复杂性是 O(log n) 或 更好 - 这是重要的部分.其他自平衡算法有 AA-、Splay- 和 Scapegoat-tree。
平衡树获得了平衡的属性(和名称),因为在树上的每次删除或插入操作之后,算法都会对树进行内省以确保它仍然是平衡的,如果不是,它会尝试解决这个问题(通过在树中旋转节点来完成每个算法的不同)。
正常(或不平衡)二叉树不会修改其结构以保持自身平衡,并且通常会超时,变得非常低效(特别是如果按顺序插入值)。但是,如果性能没有问题并且您主要想要一个排序的数据结构,那么他们可能会这样做。在不平衡树上插入/删除/搜索操作的复杂性范围从 O(1)(最好的情况 - 如果你想要根)到 O(n)(最坏的情况,如果你按顺序插入所有节点并想要最大的节点)
还有另一种变体,称为随机二叉树,它使用某种随机化来确保树不会变得完全不平衡(与链表相同)
【讨论】:
在二叉树中,右叶总是比头部小,而左叶总是比头大,所以你可以在 O(log(n)) 中搜索排序树,如果关键就需要向右走如果 bgger 小于 head 并且在左侧
【讨论】:
如果树结构没有以某种方式排序,那么使用树结构并没有多大意义——如果您计划在树中搜索一个节点并且它是未排序的,那么您将不得不遍历整棵树 (O(n))。如果你有一棵以某种方式排序的树,那么只需要遍历树的一个分支(通常为 O(log n))。
【讨论】:
用谷歌搜索以下内容:
site:stackoverflow.com binary trees
获取可以回答您的几个问题的 SO 问题列表。
【讨论】: