2019-11-30查找——B树

B树的定义及特征

  • B树又称多路平衡查找树,B树中所有节点的孩子结点数的最大值称为B树的阶。
  • 特征
    满足如下特征的m叉树
  1. 树中每个结点至多有m棵子树,每个结点至多包含m-1个关键字。
  2. 若根节点不是终端结点,则至少有两棵子树。
  3. 除根结点外的所有非叶结点至少有⌈m/2⌉棵子树,有⌈m/2⌉-1个关键字
  4. 非叶结点的结构


    2019-11-30查找——B树_第1张图片
    非叶结点的结构.JPG

    Ki(i=1,2,3,4...n)为结点的关键字,且K1 Pi(i=0,1,2,3...n)为子树根节点的指针,Pi-1所指子树的关键字均小于Ki,Pi所指的关键字均大于Ki
    5.所有的叶结点都出现在同一层次上,并不带任何信息。


    2019-11-30查找——B树_第2张图片
    三阶B树.JPG

B树的操作

查找

  1. 在B树中找结点
  2. 在结点中找关键字

插入操作

  1. 定位
    ——查找插入关键字的位置,即最底层中的某个非叶子结点(规定一定是插入在最底层的某个非叶子节点内
  2. 插入
    ①若插入后,不破坏m阶B树的定义,即插入后结点关键字个数在属于区间[⌈m/2⌉-1,m-1],则直接插入。
    ②若插入后,关键字数量大于m-1,则对插入后的结点进行分裂操作;(插入后的结点的中间位置⌈m/2⌉处的关键字,并入父结点中,中间结点左侧的结点留在原先的结点中,右侧结点放入新的的结点中,若并入符结点后,使父节点关键字数量超出范围,继续向上分裂,直到符合要求为止。)
    2019-11-30查找——B树_第3张图片
    在上图B树上插入19.JPG

插入操作

  1. 对节点进行分类
  • 非终端节点
  • 终端节点
  1. 对终端节点的删除操作
    ①直接删除
    ——若被删除关键字所在节点关键字总数>⌈m/2⌉-1(等同 于>=⌈m/2⌉),表明删除后仍满足B树的定义,直接删除。
    ②兄弟够借
    ——若被删除关键字所在节点关键字总数=⌈m/2⌉-1,且与此结点临近的兄弟结点的关键字个数>=⌈m/2⌉,则需要从兄弟结点借一个关键字,此过程需要调整该结点,双亲结点,兄弟节点的关键字。
    ③兄弟不够借
    ——若被删除关键字所在结点关键字总数=⌈m/2⌉-1,且与此结点临近的兄弟结点的关键字个数=⌈m/2⌉-1,则删除关键字,并与一个不够借的兄弟结点和双亲结点中两兄弟子树中间的关键字合并。合并后若双亲结点因减少一个导致不符合定义,则继续执行2,3步骤。
  2. 对非终端节点的删除操作
    ①若小于k的子树这关键字个数>⌈m/2⌉-1,则找出k的前驱值k',并用k'来取代k,再递归地删除k'即可。
    ②若大于k子树中关键字个数>⌈m/2⌉-1,则找出k地后继值k',并用k’来取代k,再递归地删除k'即可.
    ③若前后两子树关键字个数均为⌈m/2⌉-1,则直接合并两个子节点,然后删除k即可。

你可能感兴趣的:(2019-11-30查找——B树)