2-3树的删除

来源:互联网 发布:大数据存储硬件方案 编辑:程序博客网 时间:2024/05/21 19:12

2-3树所有叶子都在同一个层次,也就是说每一层的叶子数目都是相等的,如图1:


1.删除的元素是叶子节点并且含有两个元素,比如删除6,直接删除即可,如图2:

2.删除的元素是叶子节点并且只有1个元素的话,但是父节点的右节点函数含有两个元素,可以进行左旋转,为什么要左旋转呢,因为左边失去了平衡了,举例:删除图1的元素1的话,(6,7)进行左旋转,6的右节点保持,6的左节点等于4,如图3,4:
图3

图4:

3.删除的元素是叶子节点,但是父节点的右节点只有一个元素,此时左选择无法满足要求,那么就得找一下父节点的父节点的直接后继(中序遍历),以图4为例,删除4结点,则8的直接后继是(9,10),此时8的直接后继可以进行拆分,则9代替了8,然后6结点进行左旋转,看图:
图5:

图6:

4.如果删除的叶子节点的父结点是两个元素的话并且父节点的左右的左结点还可以插入的话,举例:图6删除10结点,删除后第2层有7一个叶子节点和(12,14)这两个结点,此时不满足要求,那么我们可以将(12,14)结点分裂并且结合到13的结点去,看图:
图7:

图8:

5.如果删除的是满二叉树的情况,则情况比较复杂,图9的8结点需要删除的,直接看图:
图9:




6.删除的是非叶子节点并且只有一个元素的情况下,举例:删除图10的4结点,直接上图:
图10





7.删除的是非叶子节点并且只有两个元素的情况下,举例:删除图11的12结点,直接上图:
图11:




2 0
原创粉丝点击