2-3查找树

来源:互联网 发布:葛亮家族知乎 编辑:程序博客网 时间:2024/06/16 14:48

2-3查找树

2-3树由2-结点、3-结点组成,为了查找的高效率,2-3树需要完美平衡。即-3查找树所有空链接到根节点的距离相同。

  • 2-结点:含有一个键(及对应值)和两条链接,左链接指向2-3树中的键都小于该结点,右链接指向2-3树中的键都大于该结点。

  • 3-结点,含有两个键(及对应值)和三条链接,左链接指向2-3树中的键都小于该结点,中链接指向2-3树中的键位于该结点两个键中间,右链接指向2-3树中的键都大于该结点。
    这里写图片描述

插入操作

在2-3查找树中插入一个新结点,我们可以在2-3查找树中进行一次位命中的查找,然后把新结点挂在树的底部。但这样会破坏树的平衡性,使用2-3树的主要原因在于它能够在插入后保持平衡。

若未命中查找结束于2-结点,那么我们只需把2-结点转换为3-结点,把要插入的新键保存在其中就好。
这里写图片描述

若未命中查找结束于3-结点

  • 一棵只含有3-结点的树中插入新键,那么这棵树中右两个键,所以它在唯一的节点中已经没有可插入的空间。为了是新键插入,我们可使3-结点临时变为4-结点并把新键保存其中。形成一个含有3个键值4个链接的4-结点。后将其转换为3个2-结点的2-3树(根结点保存为3个键值最大键值,根结点的左右结点分别为3-键值中最小、最大的键值),就能保持2-3树的完美平衡性。
    这里写图片描述
    -若在父结点为2-结点的3-结点中插入新值,如前段所说我们会把3-结点临时转换为4-结点并将其分解,但在父结点为2-结点的情况中,我们不会为中建创建一个新结点。而是将父结点转换3-结点并把中键保存其中。这样就能保持2-3树的完美平衡性。
    这里写图片描述
    这里写图片描述
    这里写图片描述

  • 若在父结点为3-结点的3-结点中插入新值,我们再次和刚才一样构造临时4-结点并分解它,然后把中键保存到父结点(3-结点)中,这样会使得父结点转换为4-结点。再在父结点中做相同的变换。直到遇到一个2-结点或终止于2-3树的根。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

参考:算法(第四版)Robert Sedgewick、Kevin Wayne著