红黑树理解(一) 从2-3树到红黑树

红黑树理解 (一) 从2-3树到红黑树
红黑树理解(二)插入过程图解
红黑树理解(三)变色
红黑树理解(四)左旋
红黑树理解(五)右旋

二叉搜索树(Binary Search Tree)

 二叉搜索树,也叫二叉排序树,简称BST。如果连续升序插入,或者连续降序插入,二叉搜索树就类似于一个链表了,这时的查询也从O( l o g 2 n log_2n log2n)退化到了O(n)。例如:

如何解决二叉搜索树存在的不平衡问题?

在插入数据时,进行旋转。
也就是平衡二叉搜索树,常见的平衡二叉搜索树有AVL树、红黑树。对于AVL和红黑树孰优孰劣,有人认为差不多,有人认为红黑树综合性能比AVL要好,参考:avl 树和 rbtree 差不多。谁好谁不好不重要。本文主要分析红黑树,为将来的HashMap源码分析做铺垫。

红黑树中红色结点有什么特殊含义吗?

红黑树中的红色结点,来源于2-3树。2-3树并不是二叉查找树,而是多路查找树。2-3树中,一个3-Node结点可以拆分成2个2-Node结点,这两个2-Node结点,用一条红色的边连接起来。
 但是BST是没有边的定义的,所以这个颜色只能记录在节点的数据结构中,所以我们把从父节点到子节点的红边会存储在子节点中——将子节点涂成红色,构成红色节点。其他的自然都是黑色节点。
关于2-3树和红黑树的更具体的分析,参考:换个角度彻底理解红黑树

红黑树举例

https://rbtree.phpisfuture.com/上,可以直接构建一刻红黑树。以文章开头那个倾斜的二叉搜索树为例,看看连续插入8,7,6,5,4,3会得到怎样的红黑树。

可以看到,从根节点到叶子结点,所有路径都只有2个黑色结点(不算叶子结点)。

Guess you like

Origin blog.csdn.net/zhangjin1120/article/details/121197078