B树的性质和插入过程

性质

  1. 平衡性:所有叶子节点都在同一层
  2. 多路 :m 阶 B 树
    最多: m 个分支,m-1 个元素
    最少: 根节点 2 个分支 1个元素
    其他节点 ⌈ m / 2 ⌉ \lceil m/2\rceil ⌈m/2⌉ 个分支 ⌈ m / 2 ⌉ \lceil m/2\rceil ⌈m/2⌉ − 1 -1 −1 个元素
  3. 有序:结点内有序,左子树<根<右子树

插入过程

  1. 定位插入点:从根节点开始,逐层向下遍历B树,找到要插入的键值应该插入的位置。

  2. 在插入点插入后,检查叶子节点是否已满。如果已满,则需要进行分裂操作。

  3. 分裂操作:如果叶子节点已满(m 个点即满),将其分裂。中间的点(第 ⌈ m / 2 ⌉ \lceil m/2\rceil ⌈m/2⌉ 个点)上升为子树根节点(插入到未分裂前的根节点当中),中间点左右两端的点变为中间点的键值所在点的左右子树。若未分裂前的根节点被插入后满了,继续重复该操作

是 否 定位插入点 是否已满 分裂操作 正常插入操作

相关推荐
划破黑暗的第一缕曙光1 小时前
[数据结构]:5.二叉树链式结构的实现1
数据结构
青桔柠薯片1 小时前
数据结构:单向链表,顺序栈和链式栈
数据结构·链表
XiaoFan0122 小时前
将有向工作流图转为结构树的实现
java·数据结构·决策树
睡一觉就好了。2 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
齐落山大勇2 小时前
数据结构——单链表
数据结构
皮皮哎哟3 小时前
深入浅出双向链表与Linux内核链表 附数组链表核心区别解析
c语言·数据结构·内核链表·双向链表·循环链表·数组和链表的区别
wWYy.4 小时前
指针与引用区别
数据结构
历程里程碑4 小时前
Linux 17 程序地址空间
linux·运维·服务器·开发语言·数据结构·笔记·排序算法
-dzk-4 小时前
【代码随想录】LC 203.移除链表元素
c语言·数据结构·c++·算法·链表
齐落山大勇5 小时前
数据结构——栈与队列
数据结构