2-3树

2-3树是一种多路查找树:2和3的意思就是2-3树包含两种结点

1)2结点包含一个元素和两个孩子(或者没有孩子)。
①左子树包含结点的元素值小于该结点的元素值,右子树包含的结点的元素值大于该结点的元素值②2结点要不有两个孩子,要不就没有孩子,不允许有一个孩子

2)3结点包含一大一小两个元素和三个孩子(或者没有孩子)。(两个元素按大小顺序排列好)
①左子树包含的结点的元素值小于该结点较小的元素值,右子树包含的结点的元素值大于该结点较大的元素值,中间子树包含的结点的元素值介于这两个元素值之间。
②3结点要不有三个孩子,要不就没有孩子,不允许有一个或两个孩子

3)2-3树所有叶子结点都在同一层次

2-3-4树

2-3-4树也是一种多路查找树:2和3和4的意思就是2-3-4树包含三种结点

3)4结点包含小中大三个元素和四个孩子(或者没有孩子)。
1、最左子树包禽的结点的元素值小于该结点最小的元素值,第二个子树包含的结点的元素值大于最小的元素值小子中间元素值,第三个子树包含的结点的元素值大于中间元素值小于最大元素值,最右子树包含的结点的元素值大于该结点最大的元素值。
2、4结点要不有四个孩子,要不就没有孩子,不允许有一个或两个或三个孩子

4)2-3-4树所有叶子结点都在同一层次

B树

B树也是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例,我们把树中结点最大的孩子数目称为B树的阶。通常记为m。
—棵m阶B树或为空树,或为满足如下特性的m叉树:

1)树中每个结点至多有m棵子树。(即至多含有m-1个关键字)("两棵子树指针夹着一个关键字")

2)若根结点不是终端结点,则至少有两棵子树。(至少一个关键字)
3)除根结点外的所有非叶结点至少有「m/2】棵子树。(即至少含有「m/2】-1个关键字)

4)所有非叶结点的结构如下:


5)所有的叶子结点出现在同一层次上,不带信息。(就像是折半查找判断树中查找失败的结点)

1.B树的查找操作

B树是多路查找树,二叉排序树是二路查找,B树是多路查找,所以它是二叉排序树的拓展。因此,B树的查找操作和二叉排序树的查找操作非常类似。
查找过程∶①先让待查找关键字key和结点的中的关键字比较,如果等于其中某个关键字,则查找成功。
②如果和所有关键字都不相等,则看key处在哪个范围内,然后去对应的指针所指向的子树中查找。

Eg:如果Key比第一个关键字K,还小,则去Po指针所指向的子树中查找,如果比最后一个关键字Kn还大.则去Pn指针所指向的子树中查找。

 

3.B树的删除操作

B树中的删除操作与插入操作类似,但要稍微复杂些,要使得删除后的结点中的关键字≥[m/2]-1,因此将涉及结点的“合并”问题。由于删除的关键字位置不同,可以分为关键字在终端结点和不在终端结点上两种情况。

1)如果删除的关键字在终端结点上(最底层非叶子结点):
①结点内关键字数量大于[m/2]-1,这时删除这个关键字不会破坏B树的定义要求。所以直接删除。
②结点内关键字数量等于[m/2]-1,并且其左右兄弟结点中存在关键字数量大于[m/2]-1的结点,则去兄弟阶段中借关键字。
③结点内关键字数量等于[m/2]-1,并且其左右兄弟结点中不存在关键字数量大于[m/2]-1的结点,则需要进行结点合并。

2)如果删除的关键字不在终端结点上(最底层非叶子结点)︰需要先转换成在终端结点上,再按照在终端结点上的情况来分别考虑对应的方法。
相邻关键字∶对于不在终端结点上的关键字;它的相邻关键字是其左子树中值最大的关键字或者右子树中值最小的关键字。

第①步︰找出这个待删除关键字的相邻关键字,比如说下图中10的相邻关键字就是9或者是11,其实就是这个大小序列中该关键字的直接前驱或者是直接后继关键字。
  

第②步︰将这个待删除的关键字和某个相邻关键字互换,然后删除终端结点的关键字

第二种情况︰左右子树的关键字数量均等于 m/2  -1,则将这两个左右子树结点合并,然后删除待删除关键字。

将待删除节点和相邻关键字进行交换

B+树

B+树是常用于数据库和操作系统的文件系统中的一种用于查找的数据结构
m阶的B+树与m阶的B树的主要差异在于:
1)在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一棵子树;而在B树中,具有n个关键字的结点含有(n+1)棵子树。
2))在B+树中,每个结点(非根内部结点)关键字个数n的范围是m/2 ≤n≤m (根结点1≤n≤m),在B树中,每个结点(非根内部结点)关键字个数n的范围是 m/2 -1≤n≤m-1(根结点∶1≤n≤m-1)。

3)在B+树中,叶结点包含信息,所有非叶结点仅起到索引作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。
4))在B+树中,叶结点包含了全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;而在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的。

5)在B+树中,有一个指针指向关键字最小的叶子结点,所有叶子结点链接成一个单链表。

其他啦啦啦啦:

 

数据结构b树和kmp算法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1ot41127vG?p=2资料来源于王道考研

第五章 B树和B+树相关推荐

  1. 第五章-语法分析之抽象语法树的建立

    参考博文: (1)Java的运算符 前几章讲解了将Java源文件分解为Token序列,并且也介绍了组成抽象语法树的各个实现类,那么如何根据Token序列分析出具体的树节点并最终形成一棵抽象语法树是语法 ...

  2. 【数据结构总结】第五章 树和二叉树(非线性结构)

    第五章 树和二叉树(非线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和 ...

  3. 【Java数据结构与算法】第十五章 B树、B+树和B*树

    第十五章 B树.B+树和B*树 文章目录 第十五章 B树.B+树和B*树 一.B树 1.引入 2.介绍 二.B+树 1.引入 2.介绍 三.B*树 1.介绍 一.B树 1.引入 为什么数据库索引要使用 ...

  4. 数据结构笔记(王道考研) 第五章:树和二叉树

    大部分内容基于中国大学MOOC的2021考研数据结构课程所做的笔记,该课属于付费课程(不过盗版网盘资源也不难找...).后续又根据23年考研的大纲对内容做了一些调整,将二叉排序树和平衡二叉树的内容挪到 ...

  5. 第五章 树16 AcWing 1628. 判断红黑树

    第五章 树16 AcWing 1628. 判断红黑树 原题链接 AcWing 1628. 判断红黑树 算法标签 平衡树 思路 代码 #pragma GCC optimize(2) #pragma GC ...

  6. 【正点原子MP157连载】第三十五章 设备树下的platform驱动编写-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  7. 408数据结构考研笔记——第五章树与二叉树(重点)

    目录 一.基本概念 1.定义 2.基本术语 3.性质(重点!!) 二.二叉树 1.定义 2.特殊二叉树 1.满二叉树 2.完全二叉树 3.二叉排序树 4.平衡二叉树 3.性质 4.存储结构 1.顺序存 ...

  8. (王道408考研数据结构)第五章树-第一节:树的定义、基本用语和常考性质

    文章目录 一:树基本概念 (1)树的定义 (2)结点分类 (3)结点关系(相关术语) 二:树的常考性质 一:树基本概念 (1)树的定义 树(Tree):这是一种非线性结构.是 n n n(

  9. C语言数据结构【手抄版】第五章 树和二叉树【上篇】

    注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 5.1.树的基本概念和术语 1.树的定义 2.树的表示法 3.基本术 ...

最新文章

  1. JPA持久化异常:PersistenceException: org.hibernate.PersistentObjectException
  2. 苹果的工作官方检索地址
  3. 下午带着几个同学打了两节课的牌~
  4. java api接口怎么写_Java 如何设计 API 接口,实现统一格式返回?
  5. 在组织中为IT部门构建小型冠军的最快方法
  6. 离婚率逐年上升,数据分析告诉你背后的主因竟然是它!
  7. ListView的性能优化之convertView和viewHolder
  8. Django admin美化插件suit
  9. 伺服步进控制程序西门子200PLC和昆仑通泰MCGS触摸屏控制伺服步进电机程序例子题】
  10. 青果教务php,拟物校园 | 拟物校园,一个高校教务系统爬虫,现支持正方教务、青果教务。...
  11. AUTOCAD——矩形命令
  12. 搭建ORB_SLAM3在Linux下的编译和运行环境
  13. 1205:汉诺塔问题
  14. 华为防火墙笔记-加密与证书
  15. 被AI潮抛弃的企业?对话微软CTO韦青,如何应对“变革”焦虑
  16. 共用体和结构体所占内存大小的计算方法
  17. Quorum NWR
  18. Linux篇19多线程第三部分
  19. MySQL中关于JOIN的用法全解
  20. 思科交换机配置单播MAC地址过滤

热门文章

  1. SQLSERVER中如何快速比较两张表的不一样
  2. Leetcode 817.链表组件
  3. [Ubuntu] 0% [Connecting to archive.ubuntu.com (2001:67c:1360:8001::17)]
  4. Docker Compose 引用环境变量
  5. 三、java IO--使用字节流写入文件
  6. static{}语句块详解
  7. 解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
  8. POJ 2240 Arbitrage Bellman_ford 判读是否存在正环
  9. BA-风阀水阀执行器接线图
  10. 为什么dubbo使用ZkClient作为zookeeper的客户端