我想知道二叉树的具体应用是什么。你能举几个例子吗?
当前回答
二叉树最重要的应用之一是平衡二叉搜索树,比如:
红黑树 AVL树 替罪羊树
这些类型的树具有这样的特性,即通过每次插入或删除节点时进行旋转等操作,将左子树和右子树的高度差保持在较小的范围内。
因此,树的整体高度保持为log n的阶数,并且搜索、插入和删除节点等操作在O(log n)时间内执行。c++的STL也以集合和映射的形式实现了这些树。
其他回答
你的程序语法,或者其他很多东西,比如自然语言,都可以用二叉树来解析(虽然不一定)。
我认为“纯”二叉树没有任何用处。(教育用途除外) 平衡二叉树,如红黑树或AVL树更有用,因为它们保证O(logn)运算。普通的二叉树最终可能是一个列表(或几乎是列表),在使用大量数据的应用程序中并没有真正的用处。
平衡树通常用于实现映射或集合。 它们也可以用于O(nlogn)排序,即使存在更好的方法。
也可以用于搜索/插入/删除哈希表,它通常比二叉搜索树(平衡与否)有更好的性能。
在需要搜索/插入/删除和排序的应用程序中,(平衡的)二叉搜索树将是有用的。排序可以在适当的位置(几乎,忽略递归所需的堆栈空间),给定一个就绪的构建平衡树。它仍然是O(nlogn),但有一个更小的常数因子,不需要额外的空间(除了新的数组,假设数据必须放入数组中)。另一方面,哈希表不能排序(至少不能直接排序)。
也许它们在一些复杂的算法中也很有用,但说实话,我什么也想不起来。如果我发现更多,我会编辑我的帖子。
其他树如f.e.b +树也广泛应用于数据库中
BST是一种二叉树,在Unix内核中用于管理一组虚拟内存区域(vma)。
在现代硬件上,由于糟糕的缓存和空间行为,二叉树几乎总是次优的。这也适用于(半)平衡的变种。如果您发现了它们,则说明性能不重要(或由比较函数主导),或者更可能是由于历史或无知的原因。
它们可以作为一种快速排序数据的方法。在O(log(n))处将数据插入二叉搜索树。然后遍历树,对它们进行排序。