我最近读过几本书,都曾经看到过二进制树和二进制搜索,但是由于我仍在计算机科学学习的初期,所以我还没有上过一门真正涉及算法和数据的课程。结构严重。
我检查了典型的资源(维基百科,谷歌),以及大多数关于(特别是)红黑树的有用性和实现的描述,因为它们密集且难以理解。我敢肯定,对于具有必要背景的人来说,这是很有意义的,但是目前,它几乎像是一门外语。
那么,什么使二进制树在编程时发现自己要执行的一些常见任务中有用呢?除此之外,您更喜欢使用哪些树(请提供示例实现),为什么?
红黑树非常适合创建平衡的树。二进制搜索树的主要问题是,您可以非常轻松地使其不平衡。想象您的第一个数字是15。然后所有的数字都逐渐小于15。您将有一棵树,左侧非常沉重,而右侧没有任何东西。
红黑树通过在插入或删除时强制树保持平衡来解决此问题。它通过在祖先节点和子节点之间进行一系列旋转来实现此目的。该算法实际上很简单,尽管它有点长。我建议拿起CLRS(Cormen,Lieserson,Rivest和Stein)教科书,“算法简介”并阅读RB树。
实现也不是那么短,所以可能最好不要在这里包含它。但是,树 广泛 用于需要访问大量数据的高性能应用程序。它们提供了一种查找节点的非常有效的方式,而插入/删除的开销却相对较小。同样,我建议您查看CLRS来阅读它们的用法。
虽然BST可能未明确使用- 但几乎每个现代RDBMS都使用树作为一个示例。同样,您的文件系统几乎可以肯定地表示为某种树形结构,并且文件也以这种方式建立索引。树木为Google提供动力。树木几乎为互联网上的每个网站提供动力。