B树插入满节点分裂有 两种方法。一种是递归写法,即先往下找到要插入的节点,直接插入。满了就传值到上层进行分裂,一种是迭代写法,在找要插入的节点过程中遇到满节点就分裂,自然当插入的节点满了往上传时其父节点非满,不需要分裂。
下面分别说明:
递归
递归写法中,将包括带插入的值在内的4个值排序,左边两个留在原来的节点,第三个往上,第四个作为新节点,即原来节点的父节点的新的子节点,如图。
基本思想就是如此,加入30节点也是满的,则继续分裂。
在分裂时,情况众多,我的递归写法感觉还存在bug。生成1-100的值,使用shuffle随机打乱再插入。但总会出现少值或者树断了的情况。将所想到的情况描述
首先找到节点,判断其值的数量,等于3则进入分裂函数,待分裂的节点为node,待插入的值为x, 递归时,newnode作为nnode, node作为nnode1。
- 将node的值与x存入优先队列,并从node删除,记录x插入的位置pos(0-3)。之后插入队列前面两个。第三个取出等待上传,第四个取出存在new node中。
- 判断插入的位置,原因