对B+树的理解

要想理解B+树,必须先知道什么是二叉排序树。
**二叉排序树:**或者是一课空树;或者是具有下列性质的二叉树:
(1)若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;
(2)若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值;
(3)它的左、右子树也分别为二叉排序树。
**平衡二叉树(又称AVL树):**它或者是一课空树,或者是具有下列性质的二叉树:
(1)它的左子树和右子树都是平衡二叉树;
(2)左子树和右子树的深度之差的绝对值不超过1。
**B树(也即B-树,也称平衡多叉查找树):**它或者是一课空树,或者是具有下列性质的二叉树:
(1)树中每个结点至多有m棵子树;
(2)若根节点不是叶子节点,则至少有两棵子树;
(3)除根外的所有非终端结点至少有[m/2]棵子树;
(4)所有的非终端结点中包含下列信息数据
(n,A0,K1,A1,K2,A2,…,Kn,An)
PS:每个节点至多有m-1个关键字,至多有m个儿子节点
**B+树:**棵 m阶的B*树和m阶的B-树的差异在于:
(1)有n棵子树的结点中含有n个关键字。
(2)所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
(3)所有的非终端结点可以看成是索引部分,结点中仅含有其子树(根结点)中的最大(或最小)关键字。
了解到这里,我们来具体了解一下对B+树各种操作的算法:
插入算法:
1.首先执行查找算法,找出被插结点的父亲结点。
2.判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入。
3.若二叉树为空。则首先单独生成根结点。
注意:新插入的结点总是叶子结点。

对程序的理解:
定义一个B+树的结构体BPlusNode,包含几个成员:
typedef struct BPlusNode *BPlusTree,*Position;
typedef int KeyType;
struct BPlusNode{
int KeyNum; //所含关键字的个数
KeyType Key[M + 1]; //该节点中的关键字,上限为什么是M+1?
BPlusTree Children[M + 1]; //该节点的孩子节点指针,问题同上
BPlusTree Next; //Next是什么?
};
初始化生成一个BPlusNode的节点,就是向内存申请一个这样的空间,并生成指向这个空间的指针NewNode。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值