高级数据结构B树

本文详细介绍了B树的定义、插入与删除操作,以及B树和B+树的区别,阐述了B树在数据结构中的应用和操作原理。
摘要由CSDN通过智能技术生成

从B 树、B+ 树、B* 树谈到R 树

定义:一颗M阶的B树

1)根节点的孩子数为2~M;(关键字个数1~M-1)

2)非根节点的孩子数为[M/2]~M。[x]上限函数。(关键字个数M/2]-1~M-1)

3)所有的叶子节点都在同一层。

4)有y个孩子的非叶子节点,其拥有y-1个关键字元素,且其按由小到大顺序排列。




B树的插入(插入一个关键字元素):

思路:

1)在B树中Find此关键字是否存在,若不存在,则新元素一般插入叶子节点层,即插入某个叶子节点中。

2)若被插入叶子节点的空间足够的话,则直接插入即可。

3)若被插入叶子节点空间满了,以至于不能插入新元素,这时需要将此叶子节点进行分裂一分为二(最好对等,一半一半),并将中间大小的元素上移到其父节点中。

4)若其父节点满了,则重复上述工作,直到不用分裂节点为止。最坏的情况,是分裂到根节点,从而建立一个新的根节点,使树的高度增加一层(这里只有Find访问路径上的那些内部节点才有可能发生变化)。


B树的删除:

思路:

1)现在B树中Find中被删除元素是否存在,若存在,则在找到的节点中进行元素的删除。

2)对元素删除后,判断其是否有左右孩子,若有则上移孩子节点中相近元素到父节点中,一般是右孩子的最左边的元素,或左孩子中的最右边元素。若没有左右孩子,则无需操作。

3)若第2)步后,某些节点中关键字的数目小于[M/2]-1,这时要根据其兄弟节点是否丰满(是否大于[M/2]-1),采取不同的操作。若存在某些兄弟节点丰满,则可向父节点中借一元素,同时将最丰满节点的最左边或最右边的元素上移(还)到父节点中。若没有丰满的兄弟节点,则选取一个相邻的兄弟节点进行合并。首先将父节点中介于此元素和其要合并兄弟节点间的元素下移到其某子节点中,然后将这两个节点合并。


B树和B+树的区别:

–有 n棵子树的结点中含有n个关键字。
–非叶子结点的子树指针c[i],指向关键字值属于[ key[i], key[i+1])前闭后开区间)的子树。
–所有的叶子结点中包含了 全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小 自小而大的顺序链接而B 树 的叶子节点并没有包括全部需要查找的信息。
-所有的非终端结点可以看成 是索引部分,结点中仅含有其 子树根结点中最大(或最小)关键字, 而B 树 的非终节点也包含需要查找的有效信息。
-此树有两个头指针,一个指向根节点,一个指向关键字最小的叶子节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值