algorithm - 红黑树

标签 algorithm binary-tree red-black-tree

我在最近阅读的几本书中看到了二叉树和二进制搜索,但由于我仍处于计算机科学学习的开始阶段,所以我还没有上过真正涉及的类(class)算法和数据结构。

我检查了典型的来源(维基百科、谷歌),大多数关于(特别是)红黑树的有用性和实现的描述都显得过于密集和难以理解。我敢肯定,对于具有必要背景的人来说,它非常有道理,但目前它读起来几乎像一门外语。

那么,是什么让二叉树在您发现自己在编程时执行的一些常见任务中有用呢?除此之外,您更喜欢使用哪些树(请提供示例实现)以及为什么?

最佳答案

红黑树非常适合创建平衡良好的树。二叉搜索树的主要问题是您可以很容易地使它们不平衡。想象一下,您的第一个数字是 15。之后的所有数字都越来越小于 15。您将看到一棵树,左边很重,右边什么也没有。

红黑树通过在您插入或删除时强制您的树平衡来解决这个问题。它通过祖先节点和子节点之间的一系列旋转来实现这一点。该算法实际上非常简单,尽管它有点长。我建议拿起 CLRS(Cormen、Lieserson、Rivest 和 Stein)教科书“算法简介”并阅读 RB 树。

实现也不是真的那么短,所以最好将它包含在这里。然而,树广泛用于需要访问大量数据的高性能应用程序。它们提供了一种非常有效的查找节点的方法,插入/删除的开销相对较小。同样,我建议查看 CLRS 以了解它们的使用方式。

虽然 BST 可能不会被显式使用 - 几乎每个现代 RDBMS 中都有一个使用树的示例。同样,您的文件系统几乎可以肯定地表示为某种树结构,并且文件同样以这种方式进行索引。树木为谷歌提供动力。树木几乎为互联网上的每个网站提供动力。

关于algorithm - 红黑树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734/

相关文章:

c - 红黑树比较函数

python - NumPy IFFT 在 OaA 卷积算法中引入黑条

algorithm - 使用红/黑树实现 Dijkstra 的最短路径算法?

python - 查找字符串中出现次数最多的字符

c - 树重建函数中的指针

algorithm - 如何使用层序遍历序列构造二叉树

recursion - 使用递归计算二叉树的大小

algorithm - 高度为h的红黑树的最小节点数计算公式是什么?

javascript - 返回 JavaScript 中字符串中最短单词的长度

java - 计算数组中间索引的差异?