对于B树和B+树的一些理解

B树

m阶B树节点元素数
  • 最大分支数m,因此所有节点最大元素数m-1
  • 叶子节点无分支,特殊情况根节点就是叶子节点
  • 根节点可以有2 ~ m个分支,因此可以有1 ~ m-1个元素
  • 非根非叶子节点最小元素数目是刚分裂后的数目,即(m-1)/2,向下取整(我习惯这样理解,也有Math.ceil(m/2)-1之类的写法)
插入
  • 插入元素的节点元素数不饱和,直接插入(插入都发生在叶子节点,与删除不一样)
  • 元素数饱和,插入溢出(节点中有m个元素),分裂(m个元素取中位数,作为上一层的元素,剩下左右元素作为该元素的左右分支。该操作递归进行,直到满足所有节点元素都不溢出)
删除
  • 〇如果发生在非叶节点,转到①,否则转到②;
  • ①子元素替换:用后继或者前驱覆盖要删除元素,然后在后继或前驱所在的子支中删除该后继或前驱,该操作递归进行,直到删除操作发生在叶子节点,转到②;
  • ②删除叶子节点元素,转到③;
  • ③调整:各节点满足要求,结束。否则考虑不满足条件的节点,如果兄弟节点元素够多,转到④,否则转到⑤;
  • ④旋转:把和兄弟节点共同的父元素A拉到这个节点成为新子元素B’,兄弟节点中距离最近的元素C上升成为新父元素A’,C的单侧分支成为B’的单侧分支,转到③;
  • ⑤合并:把和兄弟节点共同的父元素A以及兄弟节点所有的元素合并成为新节点,转到③。
B+树
  • 与B树相似性很大,不同在于节点的每一个元素有一个分支节点,而这个元素存有分支节点的最大或最小值信息,同时分支节点存有该元素
  • 不同于B树key-value同时存储,在B+树中非叶节点仅仅存放key,而叶子节点才存放key-value
  • 所有的叶子节点连接成为一个链表,极大方便了范围遍历
优势
  • 因为非叶节点只存key不存value,可以显著增加一个节点的元素树,增大B+树的阶数,随之减小树高,减少查询次数
  • 每一个元素的value都在叶子节点,且根到叶子节点深度相同,因此对所有元素查询次数相同,稳定
  • 有叶子链表存在,范围遍历很方便

可视化yyds

B-Tree Visualization (usfca.edu)

B+ Tree Visualization (usfca.edu)

上面的B+树可视化非叶节点的元素数比分支数少1,这点与B树相同,但原理还是B+的原理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值