多路查找树 B-Tree

B树和B+树


普通树,一个节点只能存储一个元素,在元素非常多的时候,就使得要么树的度非常大,要么树的高度非常大,甚至两者都必须足够大才行。显然,访问的时候使得内存存取次数非常多,是时间效率上的瓶颈。

定义

多路查找树(multi-way search trees),其每一个节点的孩子数可以多于两个,且每一个节点处可以存储多个元素。由于它是查找树,所有的元素之间存在某种特定的排序关系。
常见的四种特殊形式:2-3树,2-3-4树,B树,B+树。

2-3树

2-3树特点:树中每一个节点都具有两个孩子或三个孩子,不存在其他目的孩子(叶子没有孩子);所有叶子位于同一层次上。比如:一个2节点包含一个元素和两个孩子,不能只有一个孩子,可以没有孩子,其中,左子树小于该元素,右子树大于该元素。一个3节点包含一大一小两个元素和三个孩子(也可以没有孩子,但不可以是其他数目的孩子),左子树小于较小的元素,中子树介于较小和大元素之间,右子树大于较大元素。

2-3树复杂之处在于新节点的插入和已有节点的删除。因为,要保证操作后还是有效的2-3树。而每个节点也有可能是2节点也可能是3节点,要保证所有叶子节点都在同一层次上。
例如:一颗2-3树,插入一个节点。
在这里插入图片描述
对左侧2-3树插入一个3,首先,根据遍历,3比8小,比4小,于是只能考虑插入到叶子节点1所在的位置,考虑到所有叶子节点都在同一层,就将1位置变成3节点。

如果向2-3树中3节点插入元素,则有几种情况。
在这里插入图片描述
一是,向6 7这个三节点插入5,将三节点拆分,让双亲变成三节点,5成为中孩子,7成为右孩子。
在这里插入图片描述
二是,双亲本来是三节点,如:向2-3树中插入11,只能往双亲的双亲上转移,将12转移到8的位置构成三节点,原双亲的左子树变成新三节点的中子树(三节点叶子变成左右孩子),原双亲剩下的较大元素构成新三节点的右子树。
在这里插入图片描述
三是,在2-3树上插入2,但此时1 3节点,4 6节点,8 12节点都已经是三节点了。
这就表示,当前的树结构不满足需要,需要增加一层。但所有叶子节点都必须在同一层。所以根节点会有如此变化。将1 3 拆分,4 6 拆分,8 12拆分。
最终如右图所示。1 3 拆分,2插入为子根节点,3为右孩子;4 6拆分,4为子根节点,2子树为左孩子,6为右子树,5为6的左叶子,7为右叶子。8 12 拆分,8为根节点,4为左子树,12为右子树,10为12的左子树,14为12的右子树。通过拆分操作,整个树长高一层。
按照有效2-3树的特征,删除节点也可同样推理。

2-3-4树

未完待续……
B-tree

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏常青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值