6.5B树和B+树
2-3树:
多路查找树,2和3的意思就是2-3树包含两种结点。
1)2结点包含一个元素和两个孩子(或者没有孩子)。
@左小右大
@要不两个孩子,要不没有
2)3结点包含一大一小元素,三个孩子(或者没有孩子)。
@左小小于最小元素,右大大于最大元素,中间在大于最小小于最大。
@要不三个孩子,要不没有孩子。
3)2-3树叶子结点都在同一层次。
2-3-4和2-3树类似/。
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树是多路查找所以他是二叉排序树的拓展。
查找过程:
@先让关键字Key和节点中的关键字比较,如果等于,则直接返回,查找成功。
@如果和所有关键字都不相等,则看Key处于哪个范围内,然后去对应的指针所指向的子树中查找
例子:
找key=5:到根结点左子树,等于左子树的跟结点的关键字,返回成功。
key=11 :到根结点的右子树,和右子树的根结点的关键字比较,下雨最小值,在和其左子树的根结点的关键字比较。等于返回成功。
key=25:到右子树大于右子树根结点关键字的最大值,在指向右子树,又大于右子树的根结点的关键字,返回失败。
2.B树的插入操作:
在二叉排序树中,仅需找到插入的终端结点的位置 。但是,B树中找到插入位置后,不能简单地将其插入终点结点的位置,因为可能会导致整棵树不满足B树中的要求。
例子:
第一步:
第二步:如下左图,但是由于最多又两个关键字,所以不满足要求,需要分裂。
分裂的方法:取关键字数组中[n/2]作为新的结点的关键字,其他关键字作为他的左右孩子。
第三步:
第四步:
分裂
[3/2]=2 ,新结点为52,由于根结点只有一个关键字,可以将52和30合并,50,60作为单独的结点。
第五步:
第六步:
[3/2]=2,52作为新的根结点关键字
3.B树的删除操作:
B树中的删除操作于插入类似,要是删除后的结点中的关键字的个数>=[m/2]-1,因此涉及结点的“合并问题”。由于删除的关键字位置不同,可以分为在终端结点和不在终端结点两种情况。
在终端结点:
第一种情况:
第二种情况:
第三种情况:
不在终端结点:需要先转换为在终端结点上,再按照终端结点的情况分别考虑对应的方法。
相邻关键字:对于不在终端结点上的关键字子,他的相邻关键字是它左子树关键字的最大值或者右子树关键字的最小值。
某个相邻关键字:满足关键字数量大于[m/2]-1。
@1
@2