了解红黑树之前需要先了解一种树:2-3查找树。
2-3查找树
为了保证二叉查找树的平衡性,需要一些灵活性,因为我们允许树中的一个结点保存多个键。确切的说,将一棵标准的二叉查找树中的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两个键和三条链。2-结点和3-结点中的每条链都对应着其中保存的键所分割产生的一个区间。
定义:一颗2-3查找树要么为空,要么满足下面两个要求:
2-结点:含有一个键(及其对应的值)和两条链,左连接指向2-3树中的键都小于该结点,右连接指向的2-3树中的键都大于该结点。
3-结点:含有两个键(及其对应的值)和三条链,左连接指向的2-3树中的键都小于该结点,中连接指向的2-3树中的键都位于该节点的两个键之间,右连接指向的2-3树中的键大于该结点。
2-3查找树实现起来比较复杂,在某些情况下插入后的平衡操作可能会使得效率降低。但是2-3查找树作为一种比较重要的概念和思路对于红黑树,B树和B+树非常重要。
红黑树
红黑树主要对2-3树进行编码,红黑树背后的基本思想是用标准的二叉查找树(完全由2-结点构成)和一些额外的信息(替换了3-结点)来表示2-3树。将树中的连接分为两种类型:
红链接:将两个2-结点连接起来构成一个3-结点。
黑链接:则是2-3树中的普通连接。
确切的说,我们将3-结点表示为由一条左斜的红色链接(两个2-结点 其中之一是另一个的左子结点)链接的两个2-结点。这种表示法的一个优点是:我么无需修改就可以直接使用标准的二叉查找树的get方法。
定义:红黑树是含有红黑连接并满足下列条件