多路查找树(B树)

多路查找树(muitl-way search tree)

多路查找树每一个结点的孩子数可以多于两个,且每一个节点处可以存储多个元素。

2-3树

2-3树的每一个结点都具有两个孩子(2结点)或三个孩子(3结点)。

一个2结点包含一个元素和两个孩子(或没有孩子),且与二叉排序树类似,左子树包含的元素小于该元素,右子树包含的元素大于该元素与二叉排序树不同的是,这个2结点要么没有孩子,要么就有两个,不能只有一个孩子。

一个三结点包含一小一大两个元素和三个孩子(或没有孩子),如果某个三结点有孩子的话,左子树包含小于较小元素的数,右子树包含大于较大元素的数,中间子树包含介于两元素之间的元素。

2-3树所有叶子都在同一层上。

2-3树的插入

2-3树插入可分为三种情况:

  • 对于空树,插入一个二节点即可;
  • 插入结点到一个二结点的叶子上,即把它升级为3结点,按大小决定在左还是在右;
  • 往3结点插入一个元素,需要将其拆分,且将树中两元素或插入元素的三者中选择其一向上移动一层。

3结点插入元素有以下几种情况:

  • 若该结点的父节点是个2结点,可将其升级为三结点,把该三结点拆分,移到父节点,再插入该元素即可;
  • 若该结点的父节点是三结点,但祖父结点是二结点,可将祖父结点升级为三结点;
  • 若父结点和祖父结点都是三结点,可将它们拆分为二结点,树高增加。
2-3树的删除

删除有两种情况:

  • 所删除元素在一个三结点上,只需在该结点删除该元素即可;
  • 所删除元素在一个二结点上,需要其他分四种情形处理;
  • 所删除元素位于非叶子的分支结点,此时通常是将树按中序遍历后得到此元素的前驱或后继结点,考虑让他们来补位即可。

二结点删除的四种情形:

  • 此结点的父结点也是二结点,且父结点有一个三结点的孩子,删掉以后旋转就可以了;
  • 此结点的父结点也是2结点,且它的另一个孩子也是二结点,需要对整棵树变形,让这个孩子变成三结点,然后旋转;
  • 此结点的父结点是一个三结点,就将父结点拆分,并核其中一个子结点合并为三结点;
  • 如果当前树是一个满二叉树的状态,删除时要将树的高度减少。

2-3-4树

2-3-4树是2-3树的概念扩展,包括了4结点的使用。一个4结点包含小中大三个元素和四个孩子(或没有孩子)。

B树(B-tree)

B树是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例。结点最大的孩子数目称为B树的阶(order),2-3树是三阶B树,2-3-4树是4阶B树。

一个m阶B树具有如下属性:

  • 如果根节点不是叶节点,则其至少有两棵子树;
  • 每一个非根的分支结点都有k-1个元素和k个孩子,其中m/2≤k≤m,每一个叶节点n都有k-1个元素,其中m/2≤k≤m;
  • 所有叶子结点都位于同一层次;
  • 所有分支结点包含下列信息数据(n,A~0~,K~1~,A~1~,K~2~,…,K~n~,A~n~),其中:K~i~为关键字,且K~i~

B+树

B树有一个缺点,在遍历时必须在硬盘的各个页面进行多次访问,需要多次访问各个结点,而每次经过结点时,都要对其遍历,B+树可以解决这个问题,让遍历时每个元素只被访问一次。

在B+树中,出现在分支结点中的元素会被当做它们在该分支结点位置的中序后继者(叶子结点)中再次列出,另外,每一个叶子结点都会保存一个指向后一叶子结点的指针。

一颗m阶B+树和m阶的B树的差异在于:

  • 有n棵子树的结点中包含有n个关键字;
  • 所有的叶子结点包含全部关键字的信息,及指向含这些关键字记录的指针,叶子结点本身依关键字的大小自小而大顺序链接;
  • 所有分支结点可以看成是索引,结点中仅含有其子树中的最大或最小关键字。

这样做的好处是:

  • 如果要遍历,只需要遍历叶子结点就可以了;
  • 如果随机查找,就从根节点出发,与B树的查找相同,只不过即使在分支结点找到了关键字,也只是用来索引的,需要到达包含此关键字的终端节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值