【数据结构】m阶B树的特点、插入 和 删除
预备知识:你需要知道什么是二叉搜索树。
一、m 阶 B 树的特点
在严蔚敏的《数据结构》一书中,说“一棵m阶的B树,或为空树,或为满足下列特征的m叉数。如下:
1、每个节点至多有m个子树,也就时一个节点至多有m-1个关键字
怎么理解这句话呢,我们并不能根据一个叉树的节点中的关键字的个数来判断该树的阶数。如果你是自学,或者很久之前学过,那么你可能会不理解这就话的含义。
也就是说一棵树的阶数不是由树本身决定的,而是由外部规定的,如下图:
我们并不能判断上树是几阶B书,因为我们并不知道“2”是不是最多,如果给出说明:该树的节点中最多有两个关键字,那么我们可以有底气的回答该树是3阶B树。但是因为没有给出最多的定义,所以我们不能确定是几阶B树。
2、若根节点不是终端节点,那么至少有两颗子树
如何根节点不是终端节点,那么意味着根节点至少有一个关键字,也就说明根节点至少有2棵子树。
3、除根节点以外的所有非叶子节点至少有m/2取上界
棵子树,及至少含有m/2取上界-1
个关键字。
如果我们已知B树的阶数,那么我们可以确定其除根节点以外的所有非叶子节点中的关键字个数的下界。但是仅仅是下界而已。如下图:
我们可以看到该树的除根节点以外的所有非叶子节点中的关键字个数最多有2个,这也就意味值其阶数至少是5阶。但是并不能确定其具体是几阶。
4、所有非叶子节点中的关键字是顺序排列的,且非叶子节点的子树总比关键字多1。
二、m 阶 B 树的插入
先了解外部节点和内部节点概念:
B树的插入都是在内部节点的最后一层节点中插入的,和二叉搜索树的插入方式类似。
核心原理(一颗3阶B树):
① 若向某一个节点中插入一个关键字之后,该节点中关键字的个数 < m,那么该节点插入完成。
② 若向某一个节点中插入一个关键字之后,导致该节点中关键字的个数 = m,那么我们需要提取该节点中m/2取上界
处的关键字到其父节点中,并顺势将该节点分为两颗子树,作为m/2取上界
处的关键字的左右子树。
三、m 阶 B 树的删除
先了解外部节点和内部节点概念:
B树的插入都是在内部节点的最后一层节点中插入的,和二叉搜索树的插入方式类似。
了解一个概念:终端节点,所谓的终端节点是指内部节点中的最下层节点。
B树节点的删除分为两大部分:被删除节点在终端节点上和被删除节点不在终端节点上。
1、当删除的关键字K不在终端节点上时
当删除的关键字K不在终端节点上时,可以用K的前驱或后继M来取代K,这样就相当于删除了K。 如下:以三阶B树为例。
2、当被删除关键字在终端节点上时,有三种情况
① 直接删除关键字。如果说该关键字被删除之后所在节点的关键字仍然满足>=m/2取上界
。如下:以三阶B树为例。
② 需要向兄弟节点借一个关键字。当某一个关键字被删除后,导致该节点的关键字个数<m/2取上界
,且其兄弟节点的关键字减一之后关键字个数仍满足满足>=m/2取上界
。那么需要向兄弟节点借一个关键字。如下:以三阶B树为例。
总结:被删除关键字K需要借后继关键字M,后继关键字M需要借后继关键字N。
③ 兄弟不够借。如果被删除的关键字K的兄弟节点不满足②中的描述。那么将K删除后,剩余关键字、兄弟节点和双亲节点中的一个关键字需要合并。
✈ ❀ 希望平凡の我,可以给你不凡の体验 ☂ ✿ ,白嫖有罪 ☠ ,记得关注哦 ❥(^_-)
【数据结构】m阶B树的特点、插入 和 删除相关推荐
- 【数据结构】利用4阶B树辅助理解——红黑树删除节点
文章目录 学习目标: 学习内容: 一.删除节点的过程 二. 删除对象的转换 三.失黑的原因&失黑修正原则 3.1失黑的原因 3.2 失黑修正原则 3.2.1 可以在节点内部平衡的情况 3.2. ...
- 线段树的创建插入查找删除
一.线段树基本概念 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间 ...
- 数据结构Java实现03----单向链表的插入和删除b
文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定) 概念: 链式存储结构是基于指针实现的.我们把一个数据 ...
- c语言 trie树,C语言实现Trie树(字典树)的插入查找删除与遍历操作
Trie树,也称作是字典树,是一种哈希树的变种,查询效率较高.Trie树可以用于统计或者排序大量的字符串,比如对一系列字符串按照字典序排序. 字典树是一个多叉树,每一个节点上存储的不是一个字符串,而是 ...
- 【数据结构】单链表的创建、插入、删除及合并
定义一个链表结构的带头结点的结构体 typedef struct lst{int data;struct lst *next; } LNode,*LinkList; 本文解决以下问题: 1.编写函数, ...
- 【数据结构】顺序表的创建、插入、删除、合并
定义一个顺序表结构的学生成绩表结构体 typedef struct{int score[MAXSIZE]; //学生成绩int *elem; //存储空间的基地址 int length; //学生成绩 ...
- 【数据结构与算法】单链表的插入和删除
- 高度为5的3阶b树含有的关键字个数_B-树和B+树的应用:数据搜索和数据库索引...
B-树 1 .B-树定义:有序数组+平衡多叉树 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树 ...
- 数据结构~总结一下B树、B-树、B+树、B*树的特点
文章目录 前言 B树(二叉查找树) B-树 B+树 B-树与B+树的区别 B+树在B-树的基础上加了以下优化 为什么 B+ 树比 B-树更适合应用于数据库索引? B*树 前言 数据在计算机中的存储结构 ...
- B-tree、B+tree详解(二)插入与删除
B-tree关键字插入操作 生成从空树开始,逐个插入关键字.但是由于B-树节点关键字必须大于等于[ceil(m/2)-1],(其中ceil(x)是一个取上限的函数)所以每次插入一个关键字:首先在最底层 ...
最新文章
- 23种设计模式之单例模式
- 读取SD卡里面的BMP文件 显示到TFT上
- java创建具体时间点_java单例饿汉模式对象创建时间点疑问
- python学习笔记(四):函数
- 【Java每日一题】20161219
- 算法五——字符串匹配(中)
- Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...
- 如何填充自画形状_AI中如何用形状填充
- sonarqube没有html插件,spring-boot – 找不到id为’org.sonarqube’的插件
- 动态图相册 android,动态图相册 in de App Store
- OpenStack - 学习经验总结
- 定时器和promise_如何讲清楚Promise?
- Win10系统蓝屏错误DPC怎么解决【系统天地】
- debug-programe
- java如何验证手机号码_java如何校验国际手机号格式
- ffmpeg命令行将ts转码为mp4
- cef 获取 html代码,CefGlue获取网页源代码
- oracle数据库左边栏不见,Oracle数据库中分区表的操作方法
- 播布客LINUX视频笔记
- hiveql 没有left()right()函数,可用substr()替代