计算机基础--->数据结构(8)【B树、B+树<超详细图文>】

文章目录

  • B树(B-Tree)
    • B树的查询操作
    • B树的几种插入删除情况
  • B+树
    • B+树的主要特点
    • 插入操作
    • 删除操作

B树(B-Tree)

B树(B-Tree)是一种自平衡的搜索树,又称平衡多路查找树,主要用于系统中大量数据的读和写操作。B树的特点是能保持数据有序,这使得在B树中进行查找、顺序访问、插入和删除等操作都非常高效。

B树中单一节点拥有的最多子结点的数量称为B树的阶,一个m阶B树的主要特点如下:

  1. 所有叶子节点都在同一层
  2. 每个节点中的元素都按照升序排列,每个元素的左子树中的所有关键字都小于它,右子树中所有元素都大于它
  3. 若根节点不是叶子节点,则至少有两颗子树(2<=子树个数<=m)
  4. 除根结点和叶子节点外,节点至少有ceil(m/2)棵子树
  5. 有k个孩子的非叶子节点包含k-1个元素(ceil(m/2)<=k<=m,当m=3时,2<=k<=3)

在B树中,插入和删除操作可能涉及节点的分裂和合并,以保持树的平衡性。当插入数据时,如果节点已满,会触发节点的分裂操作;当删除数据时,如果节点过于空闲,会触发节点的合并操作。

B树的查询操作

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第1张图片

上图是一个三阶的B树,如果我们要查找元素5,需要进行如下步骤

  1. 与根节点元素9进行比较,5<9进入左子树
  2. 与左子树元素2和6进行比较,发现2<5<6,进入中间子树
  3. 与中间子树3和5进行比较,找到5

B树的几种插入删除情况

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第2张图片

  • 如果插入10,没有打破规则,直接插入

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第3张图片

  • 如果插入4,这时候可以看到叶子节点元素过多,超过了m-1,因此需要对节点进行分裂
  • 将ceil(m/2)位置的元素上升到父结点
  • 此时父结点的元素个数同样不满足B树规则,因此继续对父结点进行分裂

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第4张图片

  • 删除元素13,没有改变规则

  • 删除元素8,剩余元素不足,相邻的兄弟节点没有多余元素,这时候就需要与相邻兄弟节点进行合并操作
  • 首先移动父结点中的元素【该元素在两个需要合并的两个结点元素之间】下移到其子结点中,然后将这两个结点进行合并成一个结点
  • 删除元素11,剩余元素不足,相邻兄弟节点有多余元素
  • 删除后,父节点(9,12)就少一个子节点。此时可以向兄弟节点“借”一个元素。但6不可以直接放在元素11的位置,需要上升到到父节点中,再把元素6和12之间的元素9移动到元素11的位置

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第5张图片

  • 删除2

  • 删除元素6
  • 使用9替代6,删除9之后相邻兄弟没有多余元素,需要从父结点去借一个元素,然后进行合并

B+树

是B树的一种变体,主要用于数据库和文件系统,

B+树的主要特点

  1. 有k个子树的中间节点包含k个元素(B树是k-1),每个元素不保存数据,数据都保存在叶子节点。
  2. 所有的叶子节点包含了全部元素,依照元素的大小升序排列,叶子节点之间用双向指针链接
  3. 所有中间节点的元素都同时存在于子结点,在子结点元素中是最大或最小元素
  4. B+树叶子节点中元素个数为(ceil(m/2)~m),添加第一个节点除外

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第6张图片

在上图的B+树中,根节点元素8在子节点(2,5,8)中是最大元素,也是叶子节点(6,8)的最大元素;根节点元素15在子节点(11,15)中是最大元素,在叶子结点(13,15)中也是最大元素。

B+树的好处

方便进行范围查询,比如我要查询3~11区间的元素

  1. 首先自顶向下,查找区间的最小值3所在的叶子结点
  2. 通过链表指针,遍历到相邻叶子节点(6,8)
  3. 继续通过链表指针,遍历到相邻叶子结点(9,11)

插入操作

情况1. 若被插入元素所在的结点,其含有元素数目小于阶数 m,则直接插入

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第7张图片


情况2. 若被插入关键字所在的结点,其含有关键字数目等于阶数 m,则需要将该结点分裂为两个结点,一个结点包含 ⌈m/2⌉ 。同时,将⌈m/2⌉的关键字上移至其双亲结点。假设其双亲结点中包含的关键字个数小于 m,则插入操作完成

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第8张图片


情况3. 若插入的关键字比当前结点中的最大值还大,破坏了B+树中从根结点到当前结点的所有索引值,此时需要及时修正后,再做其他操作。

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第9张图片


情况4. 在第 2 情况中,如果上移操作导致其双亲结点中关键字个数大于 m,则应继续分裂其双亲结点。插入元素20

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第10张图片

删除操作

情况1:找到存储有该关键字所在的结点时,由于该结点中关键字个数大于⌈M/2⌉,做删除操作不会破坏 B+树,则可以直接删除。

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第11张图片


情况2: 当删除该关键字时,导致当前结点中关键字个数小于 ⌈M/2⌉,若其兄弟结点中含有多余的关键字,可以从兄弟结点中借关键字完成删除操作。

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第12张图片


情况3: 情况2中,如果其兄弟结点没有多余的关键字,则需要同其兄弟结点进行合并。

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第13张图片


情况4: 当删除某结点中最大的关键字时,就会涉及到更改其双亲结点一直到根结点中所有索引值的更改。

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第14张图片


情况5: 当进行合并时,可能会产生因合并使其双亲结点破坏 B+树的结构,需要依照以上规律处理其双亲结点。

计算机基础--->数据结构(8)【B树、B+树<超详细图文>】_第15张图片

你可能感兴趣的:(计算机基础,#,数据结构,数据结构,b树,B+树)