平衡查找树之2-3查找树

来源:互联网 发布:淘宝生鲜都发空运吗 编辑:程序博客网 时间:2024/06/16 16:45

二叉查找树不能保证树的平衡性,在最坏情况下,查找插入操作需要线性时间。
为了保证查找树的平衡性,有了2-3树的概念。
它是实现红黑树的基础。

2-3树中有两种结点:

  • 2-结点(标准二叉查找树中的结点)
  • 3-结点(两个键和3个链接)3-结点中左键<中键<右键

当插入结点时,通过一些基本操作,可以保证这棵树是完美平衡的,因此查找和插入的时间会是对数级的。

插入过程有如下几种可能性:

  • 向2-结点中插入新键
    当查找结束于一个2-结点,直接将此2-结点变为3-结点,并将键保存在其中。

  • 向一棵只含有3-结点的树中插入新键
    先将它变为一个4-结点,然后将中键变为左右键的父结点,这样就变为3个2-结点。

  • 向一个父节点为2-结点的3-结点中插入新键
    还是先将3-结点变为4-结点,将中键移至父结点中,使父节点变为一个3-结点。

  • 向一个父节点为3-结点的3-结点中插入新键
    类似上一种情况,只不过父结点变成了4-结点,将4-结点分解为2个2-结点,中键继续向上传递。

局部变换不会影响树的全局有序性和平衡性,这是理解这个算法的关键。

为什么不直接用代码实现2-3树呢?

因为要有下面这些操作:

  • 维护两种不同的结点(2-结点和3-结点)。
  • 要将被查找的键和结点中每个键进行比较(如果是3-结点的话)。
  • 将链接和其他信息从一个结点复制到另一个结点(中键向上传递和分解结点时)
  • 将结点从一种数据类型转换为另一种数据类型。(2-结点3-结点相互转换)

这些操作产生的额外开销可能使算法比标准二叉查找树更慢。
为此,我们用红黑树来实现。