问题由来
相信很多人和我一样,在网上找红黑树的一些资料,总会被他的一些概念搞晕。比如
- 为什么要有红黑节点
- 红黑树的五大性质是虽然能说通到底是为了什么
- 节点增删改查分了很多的情况来进行左旋右旋等操作
这样导致很多人把红黑树写出来就完全安装网上的分了很多情况的调整红黑节点,他们把每种情况给背住,然后写出红黑树,只能说毫无灵魂,之前的我就是这样,所以今天为了搞懂红黑树我也是看了很多资料,最后找到问题的关键。
红黑树由来
红黑树由来:在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees),后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的红黑树,就此红黑树出现在软件开发者的视野里!
Guibas 和 Sedgewick 三十年前引入的用于实现平衡搜索树的红黑树模型现在遍布我们的计算基础设施。标准教科书中描述了红黑树,它是 C++、Java、Python、BSD Unix 和许多其他现代系统中符号表实现的基础数据结构。然而,这些实现中的许多都牺牲了一些原始的设计目标(主要是为了开发删除操作的有效实现,这在原始论文中没有完全指定),因此新的外观是值得的。在本文中,我们描述了红黑树的一种新变体,它满足许多原始设计目标,并导致插入/删除代码大大简化,代码量不到常用实现的四分之一。
个人理解
首先出来是两篇论文,第一篇是叫做平衡二叉b树(Trees_ Data Structure and Algorithms for Rando)的论文,第二篇才被优化成的红黑树(Left-leaning Red-Black Trees)。
- 由于b树的结点是一个数组,每次遍历数组时候会产生大量的时间复杂度
- 与之对应的二叉搜索树也有一个确定那就是高度过高,哪怕完全对称也会很高,因为只有两个叉,但是b树就有多个
- 叉那能不能将b树等价成一个二叉树呢,于是就有了平衡二叉B树,后面被优化成了2-3-4树,最后成了红黑树
在第一篇论文已经介绍了平衡二叉b树木的性能论证,第二篇论文只是证明等价性而已。
所以说怎么把一个b树,等价成一个平衡二叉树才是红黑树的关键,而不是死死的盯着红黑树的性质。