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. django用MySQL数据库链接

    在使用的过程中出现了没有mysqld.sock这个文件的情况,无法连接到mysql数据库. 几经周折,设置路径,改文件夹的权限,也都无济于事,只有重新安装mysql服务器,第一次尝试还是失败,服务器安 ...

  2. JavaSE-运算符和流程控制

    一.运算符 1.算术运算符: (1) 进行混合运算的时候:byte,short,char之间不会相互转换,都会自动提升为int类型 .其他类型进行混合运算的时候都是小的数据类型提升为大的:byte,s ...

  3. 测试那些事儿—LR脚本插入DOS命令

    1.基础命令 dir  查看当前目录下的文件和文件夹 cd  目录名:进入特定的目录. md 路径名:建立特定的文件夹. rd 路径名:删除特定的文件夹. cls:清除屏幕. copy 路径\文件名 ...

  4. linux文件查找find命令

    linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find  [option ...

  5. node.js同步读取与异步读取文件

  6. mysql trigger 备忘

    最近用mysql有这么一个需求 item表:id,item,url,websiteid website表:id,domain item表示从不同网站获取的信息 website表示获得信息的网站,其中的 ...

  7. [Python学习笔记] 数字类型及操作

    数字类型 整数类型 十进制:1110,-123 二进制:以0B或0b开头 0b110,-0B101 八进制:以0O或0o开头 0o123,-0O567 十六进制:以0X或0x开头 0x555,-0X8 ...

  8. vue---条件与循环语句

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...

  9. linux 软件应用

    grub2 安装grub2到某分区 mount /mnt/dev /dev/sdb2 //这里选择你刚才分区的第二个分区 sudo grub-install --root-directory=/mnt ...

  10. java 重载、重写、重构的区别

    1.重载 构造函数是一种特殊的函数,使用构造函数的目的是用来在对象实例化时初始化对象的成员变量.由于构造函数名字必须与类名一致,我们想用不同的方式实例化对象时,必须允许不同的构造方法同时存在,这就用到 ...