2024/9/9 408“回头看”:b树

server/2024/9/24 16:56:25/

B树是什么?有什么作用?B树的插入和删除具体细节是什么?除了B树还有一个是B+树、还是B-树,他们有什么区别,又有什么相同点?

b树在王道考研查找这一章,所以他的主要作用就是查找。

在学习b树之前,先要回顾一下二叉查找树。他的结构体是:

typedef struct BSTNode{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;

不难看出它的结构,下面给个图示,就更加简洁明了了。

我们有个想法,能不能增加更多的分类?就是说从二叉查找树变成m叉查找树。于是b树就产生了。

结构体如下:

struct Node{
ElemType keys[4];
struct Node *chile[5];
int num; //结点中有几个关键字
};

从上面我们可以知道,假如一个结点有四个关键字,那么有五个分叉。

即如图所示:

有了这张图片就清晰很多了,同时也指出了几个特点:节点内关键字有序(方便查找,从结构体内我们知道,结点里是数组),根结点最少有一个关键字(很好理解,根结点假如没有关键字,那他不能向下分叉)。

这里还有一个规定,除根结点外(老大特殊),每个接点都有最少得关键字限制(为了提高查找效率,如果都是一个关键字,那和二叉查找树有什么区别?)

先说分叉,至少有一半以上的分叉,假如child[4],->至少两个分叉、child[5]->至少是有3个分叉。即偶数/2,奇数/2再四舍五入。

还有一个策略是忽略的,就是在m叉查找树中,任何一个节点,其所有子树的高度都要相同。也就是说所有叶结点都在同一层。b树的叶子结点是查找失败的结点。

b树的插入:

一个一个插入:溢出之后把他们从中间劈开、分给左右孩子。注意:新节点一定是插在终端节点那一层!(未溢出时)

此时中间劈开原结点分给父节点(这里体会到了结点内关键字有序的好处)这里还是把80移到父节点。规律总结:在插入key后,若导致原结点的关键字数超过上限,则从中间位置将其分成两部分,左部分放在原结点,右部分包含的关键字放到新节点,中间位置插入原结点的父节点。

若根结点满了!继续分裂:

b树的删除:

分多种情况:

终端节点:直接删除!(但是要注意删除完成之后,该结点的关键字个数是否小于一半)

非终端结点:用直接前驱替代:

用直接后继替代:

兄弟够借(找父母要,然后兄弟补给父母):右兄弟富裕

删除38

左兄弟富裕:删除92

兄弟不够借:

b+树:

图中是四阶b+树,下面说一下特点:分叉情况和b树一样。

结点的子树与关键字数相等。

所有叶结点包含全部的关键字,大小顺序排列,且相邻叶结点按大小顺序相互链接起来。

所有分支结点中仅包含它的各个子节点中关键字的最大值及指向其子节点的指针。

对比:b树的关键字每一层都有,而b+树的关键字只可能是在叶子结点。

真题训练:

注意:b-树也叫作b树。


http://www.ppmy.cn/server/115312.html

相关文章

华为 HCIP-Datacom H12-821 题库 (9)

1.需要题库的小伙伴至博客最下方添加微信公众号关注后回复题库 2.有兴趣交流IT问题的小伙伴微信公众号回复交流群,加入微信IT交流群 1.以下关于 RSTP 保护功能的描述,错误的是哪一选项? A、环路保护可以部署在根端口上,以防网络中…

使用Vue3+TS玩转高德地图

不知道大家在开发的时候,是否遇到过需要利用地图去展示一些地理位置信息,而又不知道从哪里下手,下面我将使用高德地图带大家完成地图相关内容的开发 内容主要有: 地图的初始化, 地图内置插件的使用(鹰眼…

【算法专题--回文】回文排列 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、预备知识 🥝 什么回文串 ? 四、题目解析 五、总结与提炼 六、共勉 一、前言 回文排列 这道题,可以说是--回文专题 和 哈希专题--,最经典的一道题,也是在面试中频率最高的…

什么牌子的无线领夹麦克风好,中国十大麦克风品牌排行榜推荐

​对于追求高品质视频内容的创作者来说,优质的录音设备是不可或缺的。今天,我将分享几款性价比极高的无线领夹麦克风,它们将帮助你在各种拍摄环境中获得清晰、专业的音频,让你的作品声音部分无可挑剔吧! 无线领夹麦克风…

如何恢复iPhone相册里被删掉的照片?别慌!这几招帮你恢复删掉的照片

在数字时代,手机已成为我们记录生活的重要工具,而iPhone因其出色的摄影功能备受用户喜爱。然而,随着手机中照片数量的增多,管理照片时难免会出现误删的情况。 当发现珍贵的回忆被误删时,许多人可能会感到焦虑和无助。…

推算星期几

告诉你今天是星期几,请问:过几天后是星期几? 请编写程序,输入今天的星期数 w 和所过的天数 n,计算并输出未来这一天的星期数 d。 注:用整数值 0 ~ 6 表示星期日、星期一、... 、星期六。 星期值星期日0星期…

消除数字球-第15届蓝桥省赛Scratch初级组真题第5题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第184讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,…

【leetcode刷题之路】面试经典hot100(2)——普通数组+矩阵+链表

文章目录 5 普通数组5.1 【动态规划】最大子数组和5.2 【排序】合并区间5.3 【数组】轮转数组5.4 【前缀和】除自身以外数组的乘积5.5 【哈希表】缺失的第一个正数 6 矩阵6.1 【哈希表】矩阵置零6.2 【模拟】螺旋矩阵6.3 【模拟】旋转图像6.4 【分治】搜索二维矩阵 II 7 链表7.…