王道数据结构 (37) b 树的插入
核⼼要求:
①对m阶B树——除根节点外,结点关键字个数 ≤n≤m-1
②⼦树0<关键字1<⼦树1<关键字2<⼦树2<….
在插⼊key后,若导致原结点关键字数超过上限,则从中间位置( )将其中的关键字分为两部分,左部分包
含的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置( )的结点插⼊原结点的⽗结点。
若此时导致其⽗结点的关键字个数也超过了上限,则继续进⾏这种分裂操作,直⾄这个过程传到根结点为⽌,进
⽽导致B树⾼度增1。
实例:
插入 数据 25 38 60 70 74 75 83 87 90 92 94 99 49 73 88 93 80
5阶B树——结点关键字个数 ≤n≤m-1
即:2≤n≤4 所以 一个节点最多插入 5 个元素
(1) 依次插入 25 38 49 60 这 4 个元素 2≤n≤4 符合条件
(2) 插入元素 80 一共5 个 不符合条件 分裂 (在插⼊key后,若导致原结点关键字数超过上限,则从中间位置( )将其中的关键字分为两部分,左部分包含的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置( )的结点插⼊原结点的⽗结点)
拆分规则 :
在插⼊key后,若导致原结点关键字数超过上限,则从中间位置( )将其中的关键字分为两部分,左部分包
含的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置( )的结点插⼊原结点的⽗结点
49 为中间点 49 作为父节点 25 38 作为左边部分 60 80 作为右边部分
(3)插入 90 99
(4) 插入 88
这个时候不符合条件 将 右边 部分进行拆分
规则 :
在插⼊key后,若导致原结点关键字数超过上限,则从中间位置( )将其中的关键字分为两部分,左部分包
含的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置( )的结点插⼊原结点的⽗结点
(5) 插入 83 87 刚好符合条件 n 等与4
(6)插入87 不符合条件
将 80 作为 父节点 得到
(7) 插入 93
拆分得到
(8)插入 73 74 75 拆开
得到
(9) 因为父级节点为 5 个 我们要拆分 按照同样规则进行拆分
在插⼊key后,若导致原结点关键字数超过上限,则从中间位置( )将其中的关键字分为两部分,左部分包
含的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置( )的结点插⼊原结点的⽗结点。
若此时导致其⽗结点的关键字个数也超过了上限,则继续进⾏这种分裂操作,直⾄这个过程传到根结点为⽌,进
⽽导致B树⾼度增1
越努力越幸运