二叉树和B树的简单介绍

1、二叉查找树
  特点:左子树的键值小于根节点的键值,右子树的节点大于根节点的键值。
  示例:
在这里插入图片描述

   缺点:如果存放的值一直大于根节点的值,就会造成树的不平衡,导致查询效率低下。
在这里插入图片描述

2、平衡二叉树
特点:在符合二叉查找树的条件下,还满足任何节点的两个子树节点的高度差小于等于1.
在这里插入图片描述

3、B-tree:平衡多路查找树。一棵m阶的B-tree的特征如下:
  1、树中的每个节点最多有m个孩子。
  2、除根节点和叶子结点外,其他每个结点至少有cell(m/2)个孩子。
  3、若根节点不是叶子结点,则至少有两个孩子。
  4、所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息。
  5、每个非终端结点中包含有n个关键字信息 (n,P0,K1,P1,K2,P2,…,Kn,Pn)。其中:
     a) Ki (i=1…n)为关键字,且关键字按顺序排序K(i-1)< Ki。
     b) Pi为指向子树根的结点,且指针P(i-1)指向子树中所有结点的关键字均小于Ki,但都大于K(i-1)。
     c) 关键字的个数n必须满足: ceil(m / 2)-1 <= n <= m-1。

其中17表示一个磁盘文件的文件名;小红方块表示这个17文件的内容在硬盘中的存储位置;p1表示指向17左子树的指针。
在这里插入图片描述

4、B±tree:b+树,是应文件系统所需而产生的一种B-tree的变形树。
  一棵m阶的b+树和b-tree的差异:
  1、有n子树的结点中含有n个关键字(B-tree是n棵子树有n-1个关键字)
  2、所有的叶子结点中包含了全部关键字的信息及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序连接。(B-tree的叶子结点并没有包括全部需要查找的信息)
  3、所有非终端结点可以看成是索引部分,结点中仅含有其树结点中最大或最小的关键字。(B-tree的非终端结点包含了需要查找的有效信息)
在这里插入图片描述

5、B*-tree:B*-tree是B±tree的变体,在B±tree的非根和非叶子结点再增加指向兄弟的指针;B*-tree定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2)。
在这里插入图片描述

  B+ -tree的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据复制到新结点,最后在父结点中增加新结点的指针;B±tree的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针。
  B*-tree的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针。
所以,B*-tree分配新结点的概率比B±tree要低,空间使用率更高;

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值