2-3树:是一种多路查找树,包含2结点和3结点两种结点,其所有叶子结点都在同一层次。

2结点:包含一个关键字和两个孩子(或没有孩子),其左孩子的值小于该结点,右孩子的值大于该结点。

3结点:包含两个关键字和三个孩子(或没有孩子),其左孩子的值小于关键字最小值,右孩子的值大于关键字最大值,中间孩子的值介于两个关键字之间。

2-3-4树:类似于2-3树,4结点包含三个关键字和四个孩子。

B树:是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例,树中各结点中最大的孩子数目称为B树的阶。

一个m阶的B树,或为空树,或为满足以下特性的m叉树:

①树中每个结点至多有m棵子树;

②各根结点不是终端结点,则至少有2课子树;

③除根结点外所有非叶节点至少有⌈m/2⌉(向上取整号)课子树;

④所有非叶结点的结构:{n,p0,k0,p1,k1,……kn,pn};

⑤所有的叶子结点出现在同一层次,不带信息。

B树的查找:多路查找,类似于二叉树的查找。

B树的插入:在B树中找到待插入的位置后,并不能简单的将其插入到终端结点的位置,因为此时可能会导致整棵树不再满足B树中的要求。应依次把值待定的放入结点中,当结点的数超过规定的关键字数时进行分裂。

B树的删除:与插入操作类似,但需要使得删除后结点中的关键字个数>=⌈m/2⌉-1,因此将涉及结点的“合并”问题,分以下情况讨论:

①如果删除的关键字在终端结点上(最底层非叶子结点):

  ①结点的关键字数量大于⌈m/2⌉-1,这时删除这个关键字不会破坏B树的定义要求,所以直接删除;

  ②结点内关键字数量等于⌈m/2⌉-1,并且其左右兄弟结点中存在关键字数量大于⌈m/2⌉-1的结点,则去兄弟结点中借关键字;

  ③结点内关键字数量等于⌈m/2⌉-1,并且其左右兄弟结点中不存在关键字数量大于⌈m/2⌉-1的结点,则需要进行结点合并;

②如果删除的关键字不再终端结点上(最底层非叶子结点):需要先转换到终端结点上,再按照终端结点上的情况来删除,其转换到终端结点的方法为:

  ①存在关键字数量大于⌈m/2⌉-1结点的左子树或者右子树,在对应子树上找到该关键字的相邻关键字(就是这个大小序列中该关键字的直接前驱或者直接后继),然后将相邻关键字替换待删除的关键字;

  ②若左右子树的关键字数量均等于⌈m/2⌉-1,则将这两个左右子树结点合并,然后删除待删除关键字。

B+树:是常用于数据库和操作系统文件系统中的一种用于查找的数据结构,m阶B+树与B树的主要差异在:

①在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一颗子树;而在B树中,具有n个关键字的结点含有(n+1)棵子树;

②在B+树中,每个非根结点关键字个数n的范文是⌈m/2⌉<=n<=m(根结点1<=n<=m),在B树中,每个非根结点关键字的个数n范围是⌈m/2⌉-1<=n<=m-1;

③在B+树中,叶结点包含信息,所有非叶结点只起到索引的作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址;

④在B+树中,叶结点包含了全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;而在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的。

C语言数据结构基础学习笔记——B树的更多相关文章

  1. C语言数据结构基础学习笔记——树

    树是一种一对多的逻辑结构,树的子树之间没有关系. 度:结点拥有的子树数量. 树的度:树中所有结点的度的最大值. 结点的深度:从根开始,自顶向下计数. 结点的高度:从叶结点开始,自底向上计数. 树的性质 ...

  2. C语言数据结构基础学习笔记——C语言基础

    抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合, ...

  3. C语言数据结构基础学习笔记——动态查找表

    动态查找表包括二叉排序树和二叉平衡树. 二叉排序树:也叫二叉搜索树,它或是一颗空树,或是具有以下性质的二叉树: ①若左子树不空,则左子树上所有结点的值均小于它的根结点的值: ②若右子树不空,则右子树上 ...

  4. C语言数据结构基础学习笔记——图

    图(G)由顶点集(V)和边集(E)组成,G=(V,E) 常用概念: ①V(G)表示图G中顶点的有限非空集,V永不为空: ②用|V|表示图G中顶点的个数,也称为图G的阶: ③E(G)表示图G中顶点之间关 ...

  5. C语言数据结构基础学习笔记——栈和队列

    之前我们学过了普通的线性表,接下来我们来了解一下两种特殊的线性表——栈和队列. 栈是只允许在一端进行插入或删除的线性表. 栈的顺序存储结构也叫作顺序栈,对于栈顶指针top,当栈为空栈时,top=-1: ...

  6. C语言数据结构基础学习笔记——静态查找表

    查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...

  7. C语言数据结构基础学习笔记——基础线性表

    线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列,它具有一个表头元素和一个表尾元素,并且每一个数据元素最多只有一个直接前驱和一个直接后继. 线性表的顺序存储也叫作顺序表,它的特性是 ...

  8. Oracle基础学习笔记

    Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...

  9. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

随机推荐

  1. oracle中left join,right join,inner join的坑

    本文主要是记录一下实际使用oracle中join查询遇到的坑 1.用到两张表,学生表和学年分数表,先建立 2.普通连接查询 INNER JOIN,查询每个学年有成绩的学生以及分数情况 LFET JOI ...

  2. js常用随手记

    1. 判断是否是空对象 let myObject={} Object.keys(myObject).length 2. void 0 代替 undefined undefined 不是保留字,在局部作 ...

  3. 计算机原码、补码、反码与java移位运算符(<</>>/>>>)

    一.机器值和真值 1.机器值 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机 ...

  4. oracle控制文件问题

    下午时连接数据库突然发现连不上了,监听报错找不到服务,于是登录数据库所在服务器,查看监听状态,oracle:lsnrctl status 监听状态正常,登入数据库查看[oracle@frkdb1 ~] ...

  5. 聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用

    1.用python实现K均值算法 import numpy as np x = np.random.randint(1,100,20)#产生的20个一到一百的随机整数 y = np.zeros(20) ...

  6. 2018-2019-2 20165313 《网络对抗技术》Exp4 恶意代码分析

    一.实践目标 1.监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systrac ...

  7. Sqoop简介

    一  Sqoop是什么 Sqoop:SQL-to-Hadoop 连接传统关系型数据库和Hadoop的桥梁 把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS.HBase 和 Hive) ...

  8. Linux第七节课学习笔记

    RHEL7用户身份有以下这些: 1.管理员 root UID:0 权限最大: 2.系统用户 UID:1-999: 3.普通用户 UID:1000+. 一个用户基本组只有一个,扩展组可多个,创建扩展组用 ...

  9. MyCP课下作业

    任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为 ...

  10. nvm 知识点

    事项 作用 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash 安装nvm comm ...