2-3查找树

2-节点:含有一个键和两条链接(左链接指向小于该键值的子树,右链接指向大于该链接的子树)

3-节点:含有两个键和三条链接(左链接指向小于所有键值的子树,中链接指向位于键值中间的子树,右链接指向大于所有键值的子树)

2-3查找树如图:

在一棵完美平衡的2-3查找树中,所有叶子节点到根节点到距离是相同的

查找过程:

判断一个键是否在树中,先将其与根节点比较,如果它与其中任一一个键值相等,则查找命中。否则根据比较出的结果到指定相应的区间链接里去查找,若相应区间的链接是空链接,则查找未命中。

例图:

插入:

当向2-3树插入一个新节点,可以和二叉树一样先进行一次未命中的查找,然后把新节点挂在尾部。

此时需要保持2-3查找树的完美平衡性,要分情况:

(1)向一个2-节点插入新键:

     把这个2-节点替换为3-节点,将要插入的键值和原来本身的键值保存为一个3-节点的键值,即可。

(2)向一颗只含一个3-节点的树插入新键

因为此时本身已经有了两个键,所以需要将该节点变为4-节点,再将该4-节点分解为一个2-3子树

(3)向一个父节点为2-节点的3-节点插入新键

首先还是先构造一个4-节点。然后将该4-节点的中间键值移动到原来的父节点。而另外的两个键值再分别构造成2-节点

(4)向一个父节点为3-节点的3-节点中插入新键

还是先构造一个4-节点并分解,然后将其中间键值插入父节点,重复上一种情况的操作。此时父节点成了4-节点,父节点再将中间键值插入父父节点......就这样一直向上不断分解临时的4-节点并将中值插入更高层的父节点。直到遇到一个2-节点或到达3-节点的根。

如果一直分裂到根节点,且根节点也是3-节点,则可将根节点按照向一颗只含有一个3-节点的树中插入新键的方式(2)处理

同时,这些局部变换不会影响到树的全局有序性和平衡性,任何空链接到根节点的路径长度都是相等的。

猜你喜欢

转载自blog.csdn.net/ziggyPLAYguitar/article/details/82388111
今日推荐