数据结构-7.5查找

前言-数据结构

数据结构是需要反复咀嚼,不管什么时候都可以重中获取现在在开发中的遇到的问题答案。

B-树

介绍

在这里插入图片描述

插入操作

  • B-树(「m - 1 )- 1 <= 结点中的关键字个数 <= m - 1, 并且整个B-树可以看成全部由关键字组成的树,每次插入一个关键字不是在树中添加一个叶子结点,而是在查找的过程中找到叶子结点所在层的上一层(叶子结点是记录,上一层是关键字最后一层),在某个结点中添加一个关键字,若结点的关键字个数不超过m-1,则插入完成,否则产生结点的分裂。

  • 例子

    • 3阶B-,{m-1 到「m - 1 / 2} 最多是三个子树,至少是二个子树(m - 1) = 2 ,所以一个结点最多有2个关键字
      在这里插入图片描述
    • 此时26 插入,超过m-1 = 2个关键字,就必须分裂,此时30是中间位置,就上位到24同层级
      在这里插入图片描述
    • 插入26
    • 步骤1:找到插入26的结点,d结点,d结点关键字多项
    • 步骤2: d结点的中间结点上位,双亲结点
    • 步骤3: d结点分裂(中间结点上位)分裂时26及其前后指针保留在d中,37及其前后指针创建到d中,30及指向d‘的指针插入到双亲结点b中,如果30的插入导致b中关键字个数等于3,则按同样方法分裂
      在这里插入图片描述
      在这里插入图片描述
    • 插入 85
      在这里插入图片描述
      在这里插入图片描述
    • 最后插入7
      在这里插入图片描述
      在这里插入图片描述

删除操作

  • 假设删除关键字不在最下层,设关键字为K,则可以用Ai指向子树的最小关键字Ai-1指向子树的最大关键字替换Ki,再删去这个关键字即可,而该关键字必定在最下层,所以只需要删除最下层结点关键字的情况。假设删除结点在最下层,删除后仍然满足B-树定义则删除结束,否则要进行合并结点的操作,合并可能自下向上层层进行。
  • 例子
    在这里插入图片描述
  • 直接删除12
    在这里插入图片描述
  • 删除50,因为最少是结点至少是1,所以要接兄弟的
    在这里插入图片描述
  • 删除53,那e结点的61和90就减少到两个指针,所以60降到它的子树
    • 情形3:删除若兄弟不够,则高降且合并(拉回来)删除 上图关键字(53)被删关键字(53)所在节点(f)和其相邻的兄弟结点(g)中的关键字数目均等于「m/27 1(1)假设该节点有右兄弟(g),在删去关键字(53)后,他所在结点(f)中剩余的关键字和指针加上双亲结点(e)中的关键字(61)-起合并到右兄弟结点(g)中。
      在这里插入图片描述
  • 删除37 情形3 拉下来合并
    在这里插入图片描述

B+树

在这里插入图片描述

  • 操作: B+树的查找、插入、删除
    在B+树上进行随机查找、插入和删除的过程基本上与B树类似。

  • 查找:若非终端结点上的关键字等于给定值,并不终止, 而是继续向下直到叶子结点。因此,在B+树种,不管查找成功与否,每次查找都是走一条从根 节点到叶结点的路径。B+树查找的分析类似于B- 树。

  • 插入:仅在叶子结点上进行插入,当结点中的关键字个数大于m时要分裂成两个结点,他们所含关键字的个数分别为[(m+1)/2]和[(m+1)/2 ]:并且,他们的双亲结点应同时包含这两个结点中的最大关键字。

  • 删除: B+树的删除也仅在叶子结点进行,当叶子结点中最大关键字被删除时,其在非终端结点中的值可以作为一个“分界关键字”存在。若因删除而使结点中关键字的个数少于[m/2]时,其他兄弟结点的合并过程亦和B树类似。

猜你喜欢

转载自blog.csdn.net/weixin_41732253/article/details/109756111