一、简介

  1. B树是什么?

1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。
一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。
5、所有的叶子结点都位于同一层

关键点理解:

1.能够清晰各节点的名称,分清 叶子节点、外部节点、根节点。(如上图)
2.m阶代表 最多的子女树的数量,例如三阶 最多只能三个子女树,而 思考一下 m个子女树 ,是不是只需要 m-1个关键字则可满足。(原因关键字的左右边界可以导致多一个插入位)因此 m阶最多只能m-1一个关键字。
3.除根节点外节点的关键码 >= ceil(m/2)-1 ,此处需要结合后面的插入以及应用。
4.思考为什么要保持叶子节点同一层(保持查找效率,结合二叉搜索树思考(二叉搜索树就是2阶多路搜索树))?

  1. B树的应用

B树大量应用在数据库和文件系统(此类软件 文件数量巨大,使用普通的查找效率极低,因此使用B树,一般B树
的关键码会在100以上)当中。它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。

假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据,如果换成二叉查找树,则需要20层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值,只需要读取两次硬盘。如mongoDB数据库使用,单次查询平均快于Mysql(但侧面来看Mysql至少平均查询耗时差不多)

二、基本操作

  1. 插入操作

插入的思路比较简单,但一定也需要动手去画画,这样才会更加理解B树的原理和目标。

(1) 如果该结点的关键字个数没有到达m-1个,那么直接插入即可;

(2)如果该结点的关键字个数已经到达了m-1个,那么根据B树的性质显然无法满足,需要将其进行分裂。分裂的规则是该结点分成两半(这也是为什么 除根节点外 其他节点关键码 >= ceil(m/2)- 1 的原因所在),将中间的关键字进行提升,加入到父亲结点中,但是这又可能存在父亲结点也满员的情况,则不得不向上进行回溯,甚至是要对根结点进行分裂,那么整棵树都加了一层。


注意点:插入关键字最终落脚点在叶子结点。

  1. 删除操作

删除操作,较为复杂一点,需要反复思考、分清不同情况(即 本身关键码够?不够那么兄弟节点够? 兄弟节点都不够那么说明和兄弟合并可以满足小于等于m-1则需要合并 也可能会导致树的缩短)。

具体步骤如下:

(1)判断删除位置(很多博客没有考虑,可能觉得只讲关键步骤更为重要,但是我还是详细列出,更好进行理解)
a. 若删除关键字key在根节点,且无子女树,那么直接删除。

b. 若删除关键字key在非叶子节点,那么拿 该关键字的后继(前继也可以,优先后继,后面的向兄弟节点借也优先右兄弟)覆盖删除关键字key且删除后继。然后落脚点变为删除了叶子节点的某个关键字(即该关键字key的后继或前继)。


由b步骤,我们可以知道 所有的删除都可以归结在删除叶子节点了。那么再接着讨论以下情况:

(2)讨论删除该关键字的后果。

a. 删除之后相安无事,无需任何处理:在 后继关键字(或前继,看个人选择,后面统一选择后继)所在叶子节点删除该关键字之后,依然满足 关键字数量 >= ceil(m/2)-1 ,则无需调整。

b.删除之后不能自保了,考虑向 兄弟节点(优先右兄弟,右兄弟无则左兄弟)借。如果兄弟也不够借,那么就 合并。
借的规则:兄弟关键字上移给父亲节点,父亲关键字下移给该节点。
合并规则:父亲节点关键字下移与兄弟节点合并。

合并的情况(以上图为例删除40):

合并之后,发现 父亲节点为空了,则需要重复以上步骤,合并50,再50,60,80合并则如下图。(合并之后会出现考虑分裂的情况,结合插入情况的分裂规则 进行分裂)

B树的插入、删除操作相关推荐

  1. 数据结构-----AVL树的插入删除操作

    对于AVL的插入和删除,主要利用的就是上篇文章所述的四种旋转操作,根据插入后不同的结构选用不同的方式复原平衡. 再次声明一下,http://www.cnblogs.com/QG-whz/p/51672 ...

  2. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

  3. 浅析B树、B+树插入删除操作(附代码实现)

    首先自平衡树是为了解决二叉搜索树在有序数据中退化为链表的问题(即查找时间退化为 O(n) 级别). 自平衡树中,B树.B+树可以说是最简单的,没有旋转.变色等操作.我们可以拿多路平衡查找树和同样是自平 ...

  4. mysql 插入删除操作_MySQL——增删改操作

    插入语句 一次插入操作只插入一行数据 insert into [tablename](listname1,listname2,......) values (value1,value2,......) ...

  5. (图解)循环队列的三种判断队空、队满操作(附带源码和插入删除操作等一些基本操作)

    目录 一.普通的顺序存储队列 二.循环队列 (1)少用一个元素空间 i.初始化队列操作: iii.入队操作: iv.出队操作: (2)设置flag标志 i.初始化队列操作: ii.判断队空操作: ii ...

  6. 请问,你心里有B树吗??(B树添加、删除操作详细图解)

    目录 1 B树 1.1 B树的特点 1.2 m阶B树 1.2.1 m阶B树的性质 1.3 B树的搜索 1.4 B树的添加 1.4.1添加产生的上溢 1.5 B树的删除 1.5.1 删除产生的下溢 1 ...

  7. 详细介绍红黑树 性质 定义 插入删除操作

    红黑树 定义 节点是红色或黑色 根结点一定是黑色 所有叶子节点都是黑色(指的是null) 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点) 从任意节点到其每个叶子 ...

  8. 链栈常规插入删除操作

    #include <stdio.h> #include <stdlib.h> typedef int DataType; struct Node {DataType data; ...

  9. 快速了解B+树的插入、删除操作

    B+树非常的复杂,这里不进行详细的讲解,只对基本的插入删除操作进行说明. 在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,各叶节点用指针连接.因此在进行插入删除操作时,要进行调整, ...

  10. 2-3树的插入和删除操作

    注意:以下均用2-3树指代2-3查找树 2-3树的定义: 2-3树首先是一颗二叉查找树(BST树),也是一颗平衡二叉树(AVL树),所以同时包含两者的性质, 2-3树是一颗完美平衡的二叉树,也就是说所 ...

最新文章

  1. windows server 2008设置远程桌面连接最大数量
  2. Python 查重,统计重复 排序
  3. 成为数据专家,你只差一个Quick Insights的距离
  4. 语言设计谁年龄大_这桌子谁设计的?脑洞够大,除能360°翻转,打台球,乒乓球都行...
  5. svm多分类代码_监督学习——分类算法I
  6. It's a start!
  7. mysql索引0affected_mysql 创建索引和删除索引
  8. 【转】无需刻录DMG光盘,教你在VMWare下安装MAC OS X Snow Leopard 10.6
  9. Java AtomicInteger类源码解析
  10. lbochs模拟器最新版_Bochs模拟器
  11. 软件测试用例设计(三)——场景法
  12. iOS13.3越狱插件推荐
  13. illustrator插件-常用功能开发-直角圆角化-js脚本开发-AI插件
  14. 3G模块SIM5360E实现拨号上网功能
  15. 现代企业管理的12法宝(zt)
  16. top 100 percent
  17. 迁移学习和finetune的区别及迁移学习代码实现
  18. 关于运算放大器电流流向的问题
  19. uniapp——操作成功返回首页
  20. 国外开源IoT平台Thingsboard社区版本(V3.3.2)在Win10环境下进行源码编译及运行指南

热门文章

  1. Antmove踩过的雷
  2. C语言学习日记(14)——迷宫算法的一点优化
  3. 走进Spring Cloud之一 微服务和SpringCloud
  4. php $a $b = $c 这种语法我想打死你!
  5. Havok 粒子系统介绍
  6. Promises/A+规范(中文翻译)
  7. 眼睛的疾病数不清,这些症状不及时处理都有可能致盲!
  8. win10系统安装Oracle 11g时遇到[INS-13001]环境不满足最低要求解决办法
  9. js中对象不支持此属性或方法
  10. htc服务器更新系统,HTC U11国行版系统更新:系统大变