【算法】红黑树由来

170 阅读3分钟

二叉排序树(二叉搜索树、二叉查找树)

什么是二叉排序树(二叉搜索树、二叉查找树)?
对于任意一个节点,左边比自己小,右边比自己大的树就叫做二叉排序树(二叉搜索树、二叉查找树)。

二叉平衡排序树

二叉排序树虽然提高了性能但是我们还能不能让性能更高一些呢?
所以我们引入了二叉平衡排序树。

以1000个随机数为例,查找一个数是否在树中。
二叉排序树的计数的值大致为940次左右
而二叉平衡排序树计数的值大致为20次左右
由此可见二叉平衡排序树的性能提高了很多。

二叉平衡排序树性能是极致吗?
不是

影响二叉平衡排序树的性能的点在哪?
在于二叉平衡排序树只能有两个叉,导致在节点铺满的时候也有很多层。
希望可以一个节点存多个数。

如何才能让查找的效率尽可能的少?
树的层级越少,查找效率越高

怎么样才能让二叉平衡排序树的层数变少?
如果不是二叉,层数会更少

叉越多,层数越少,但是叉越多,树的结构越复杂
研究表明,最多有 4 个叉的时候,性能是最好的

这个时候就衍生出来一种新的树,叫做 234 树

234树

234树的机制比普通的二叉树多了很多改变。

234树可以有两个叉,三个叉,四个叉,也可以没有分叉,在234树的每个叉中可以存放三个数据。

234树的增长模式是从下向上增长的,一个结点存放了三个数据,如果又新来了一个数据如果比这三个数据都大,就将三个数据中间大小的数据放到上边一层,最小的数据放在左边,再有新数据依次加入。

所以234树天然就是平衡的,无需后天变,分支较多,所以当数据量大的时候层级较少,因为每个节点中存放的数据较多,所以当数据量大的时候比较节省节点。


红黑树

红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。

红黑树是一种平衡二叉查找树的变体,它的左右子树高差有可能大于 1,所以红黑树不是严格意义上的平衡二叉树(AVL),但 对之进行平衡的代价较低, 其平均统计性能要强于 AVL 。

特征:

性质1. 结点是红色或黑色。 [3]

性质2. 根结点是黑色。 [3]

性质3. 所有叶子都是黑色。(叶子是NIL结点) [3]

性质4. 每个红色结点的两个子结点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色结点)

性质5. 从任一节结点其每个叶子的所有路径都包含相同数目的黑色结点。 [3]

1.严格满足二叉排序树的条件
2.不严格满足平衡二叉树(AVL)条件,左右子树高度差有可能大于 1。
注意: AVL树以平衡因子为平衡条件,红黑树以其五点性质为平衡条件,虽都有保持平衡的共性,但实际上红黑树中不用左右树高(height)做平衡,所以高度差可能会大于1。

截屏2022-06-05 下午6.43.03.png