B树、B-树、B+树区别

版权声明:前半生,不害怕;后半生,不后悔! https://blog.csdn.net/qq_14842117/article/details/89364745

1.首先介绍二叉排序树,二叉排序树的定义:
二叉排序树或者是空树或者是满足以下性质的树:
1.若它的左子树不空,则左子树上所有关键字的值均小于根关键字的值
2.若它的右子树不空,则右子树上所有关键字的值均大于根关键字的值
说明:二叉排序树的中序遍历是有序的

                       5
                    /     \
                   4       8
                  /       / \
                 3       7   9
                        /     \
                        6     10

二叉排序树的查找算法:

BTNode * BSTSearch(BTNode* bt,int key){
 if(bt == null) return null;
 else{
 if(bt->key == key) return bt;
 else if(key<bt->key) return BSTSeach(bt->lchild,key);
   else return BSTSearch(bt->rchild,key);
 }
}

二叉排序树的插入算法:

int BSTInsert(BTNode *&bt,int key){
if(bt == null){//找到空指针,创建新结点插入
bt = (BTNode*)malloc(sizeof(BTNode));
bt->lchild=bt->rchild=null;
bt->key = key;
return 1;
}else{
if(key == bt->key) return 0;//关键字已存在于树中,插入失败,返回0
 else if(key<bt->key) return BSTInsert(bt->lchild,key);
  else return BSTInsert(bt->rchild,key);
}

}

2.平衡二叉树
平衡二叉树又称AVL树,是一种特殊的平衡二叉树。其左右子树都是平衡二叉树,且左右子树高度之差的绝对值不超过1。一句话:以树中所有结点为根的树的左右子树高度之差的绝对值不超过1。

3.B-树的基本概念
B-树中所有结点孩子结点个数的最大值称为B-树的阶,通常用m表示,从查找效率考虑,要求m>=3.
一个m阶的B-树或者是一棵空树或者是满足以下要求的m叉树。
1.每个结点最多有m个分支;最少分支树要看分支树是否为根节点,根节点至少有2个分支,非根结点至少有【m/2】(向上取整)
2.有n(k<=n<=m)个分支的结点有n-1个关键字,它们按递增顺序排列。
3.每个结点的结构为

| n | k1 |k2|…|kn|
| p0| p1 |p2|…|pn|
其中,n为该结点中关键字的个数:ki(1<=i<=n)为该结点的关键字且满足ki<ki+1;pi(0<=i<=n)为该结点的孩子结点指针且满足pi(1<=i<=n-1)所指结点上的关键字大于ki且小于ki+1,p0所指结点上的关键字小于k1,pn所指结点上的关键字大于kn.
4.结点内关键字互不相等且按从小到大排列
5.各个底层结点是叶结点,它们处于同一层;叶结点下面是失败结点,是查找失败到达的位置。
扩展:平衡m叉查找树是指每个关键字的左侧子树与右侧子树的高度差的绝对值不超过1的查找树,其结点结构与上面提到的B-树结点结构相同。由此可见,B-树是平衡m叉查找树,但限制更强,要求所有叶结点在同一层。

说明:B-树中一个很重要的特性是,下层结点内的关键字取值总是落在上层结点关键字所划分的区间内,具体落在那个区间内可由指向它的指针看出。

4.B+树的基本概念
1.在B+树中,具有n个关键字的结点含有n个分支;而在B-树中,具有n个关键字的结点含有n+1分支
2.在B+树中,每个结点(除根节点以外)中的关键字个数n的取值范围为【m/2】<=n<=m,根结点的取值范围为1<=n<=m;而在B-树中,它们的取值范围分别是[m/2]-1<=n<=m-1和1<=n<=m-1
3.在B+树中叶子结点包含信息,并且包含了全部关键字,叶子结点引出的指针指向记录;而B-树中叶子结点不包含信息,和其他非叶子结点一样只包含关键字(或者说索引)。
4.B+树总所有非叶子结点仅仅起到一个索引的作用,即结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址;而在B-树中,每个关键字对应一个记录的存储结构。
5.在B+树上有一个指针指向关键字最小的叶子结点,所有叶子结点链接成一个线性链表,而B-树没有。

猜你喜欢

转载自blog.csdn.net/qq_14842117/article/details/89364745