网站首页 > 技术文章 正文
B树又叫B-树,它是一种多路平衡搜索树,它的阶数m指它最多可以有多少个子结点,当m为2时,B树就成了二叉搜索树。
一棵m阶的B树定义如下:
- 每个结点最多可以有m-1个关键字,可以是键值对;
- 根结点最少可以只有1个关键字;
- 非根结点最少有m/2个关键字;
- 每个结点的关键字按照从小到大排序,它左子树结点的关键字都小于它,右子树结点的关键字都大于它;
- 所有叶子结点位于同一层,也就是根结点到所有叶子的路径长度相同;
- 每个结点都存有索引key和数据value。
因此,根结点关键字数量范围是1至m-1,非根结点关键字数量范围是m/2至m-1。每个结点存储了关键字(key)和关键字对应的数据(value),以及字结点的指针。我们将一个关键字key和其对于的数据value称为一条记录。
在数据库中,我们将B树作为索引数据结构,可以快速查找key对应的value,value存储条目在磁盘上的逻辑地址。
B树的插入操作
插入指在B树中插入一条记录,即键值对(key-value)。如果B树中存在需要插入的键值对,则用新的value替换原value即可。若是新的键值对,则一定要在叶子结点插入。
- 根据要插入的结点key的大小,在叶子结点中插入;
- 判断当前结点的key的个数是否小于等于m-1,若是,则结束,否则进入第3步。
- 以中间key为界将结点分割为两部分,中间key插入父结点,这个key的左指针指向左部分结点,右指针指向右部分结点。继续进行第三步。
下面以一个5阶B树为例,介绍插入操作。
a)在空树中插入39
b)继续插入22,97和41
c)继续插入53
这时结点的key个数超过了m-1,以key41分割结点,key41插入父结点,key41左指针指向前半部分,右指针指向后半部分。
d)依次插入13,21,40
e)依次插入30,27, 33 ;36,35,34 ;24,29
f)插入26
以key27分隔根结点
此时根节点也要分割
g)最后再依次插入17,28,29,31,32
B树的插入操作
删除操作是指,根据key删除B树结点中对应的键值对(key-value)。若B树中不存在key,删除失败。
- 如果要删除的key位于非叶子结点,则将该key的后继(后继一定要在叶子结点)key替换该key,并将该后继key从叶子结点删除;
- 如果该叶子结点key的个数大于m/2,结束,否则进入步骤3;
- 如果兄弟结点key的个数大于m/2,则将父结点的key下移到该结点,兄弟结点的key上移到父结点;
- 否则,将父结点key下移与兄弟节点、该结点key合并,形成一个新结点。原父结点指向两个孩子的两个指针变成了指向该新结点的一个指针。重复步骤2。
下面以一个5阶B树为例,介绍删除操作。
a)原始状态
b)删除21
c)删除27
先将key28替换key27
将兄弟结点的key26上移一个层次,再将key28下移一层至右子结点
d)删除32
父结点key30下移,和左右子结点合并为一个新结点
d)删除40
父结点key36下移,和左右子结点合并为一个新结点
最后将根结点和左右子结点合并为一个结点,完成。
注:凡属于本公众号内容,未经允许不得私自转载,否则将依法追究侵权责任。
猜你喜欢
- 2024-10-25 《王牌部队》高粱拿了“喜剧人”剧本,笑点泪点都被他承包了
- 2024-10-25 纯爱小说推荐|生活所迫,我只能把你的后宫变成我的兄弟了
- 2024-10-25 占星秒懂|宫位的形成与解析(下) 宫位意思
- 2024-10-25 农村兄弟建双拼更有气势还省钱,2020年超受欢迎的双拼户型分享
- 2024-10-25 我爸说,“你没有结婚,我在村子里比做贼还丢人!”
- 2024-10-25 「漫步计算机系统」之数据结构与算法(18):红黑树结点的删除
- 2024-10-25 IT兄弟连 HTML5教程 CSS3揭秘 CSS3概述
- 2024-10-25 通过css类/选择器选取元素 文档结构和遍历 元素树的文档
- 2024-10-25 琅琊榜:兄弟之情,远比男女之情更加动人
- 2024-10-25 参加兄弟婚礼祝福语 参加兄弟婚礼祝福语简短
你 发表评论:
欢迎- 最近发表
-
- 吴谨言专访大反转!痛批耍大牌后竟翻红,六公主七连发力显真诚
- 港股2月28日物业股涨幅榜:CHINAOVSPPT涨1.72%位居首位
- 港股2月28日物业股午盘:CHINAOVSPPT涨1.72%位居首位
- 港股3月2日物业股涨幅榜:CHINAOVSPPT涨1.03%位居首位
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%
- 天赋与心痛的背后:邓鸣贺成长悲剧引发的深刻反思
- 冯小刚女儿徐朵追星范丞丞 同框合照曝光惹人羡,回应网友尽显亲民
- “资本大佬”王冉:51岁娶小17岁童瑶,并承诺余生为娇妻保驾护航
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%位居首位
- 「IT之家开箱」vivo S15 图赏:双镜云窗,盛夏风光
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)