B树和B+树
2016-03-30 15:18
204 查看
B树,又称B-树,它是一种平衡的多叉树。
一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。
它或者是空树,或者是满足下列性质的树:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、所有的叶子结点都位于同一层。
在B-树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。
因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
B-树中的一个包含n个关键字,n+1个指针的结点的一般形式为: (n,P0,K1,P1,K2,P2,…,Kn,Pn)
其中,Ki为关键字,K1<K2<…<Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针。
一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。
它或者是空树,或者是满足下列性质的树:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、所有的叶子结点都位于同一层。
在B-树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。
因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
B-树中的一个包含n个关键字,n+1个指针的结点的一般形式为: (n,P0,K1,P1,K2,P2,…,Kn,Pn)
其中,Ki为关键字,K1<K2<…<Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针。
m阶的B树和m阶的B+树的区别 |
1)B+树上所有的有效数据全在叶子节点上,而B树所有节点分散在树中,B-树中的关键字不重复。 2)B+树中有几个关键字就有几个子树,而B树中具有n个关键字的节点含有n+1棵子树。 3)B+树有两个指针,根指针和指向最小节点的指针,叶子节点连接成一个不定长的线型链表。 4)B+树中,每个节点(除根节点外的非叶子节点)中的关键字个数取值范围⎡m/2⎤<= n <=m,根节点n的取值范围是2<=n<=m。B树中,每个节点(除根节点外的非叶子节点)中的关键字的取值范围⎡m/2⎤-1<= n <=m-1。 5)B+树中的所有非叶子节点仅仅起到索引作用,节点中的每个索引项只包含对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。而在B树中,每个关键字对应记录的存储地址。 |
相关文章推荐
- java过滤器-双向过滤
- Quartz任务调度器及与Spring的整合使用
- centos7基本环境搭建
- An Overview of Complex Event Processing2
- C# 调用Excel 出现服务器出现意外情况. (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)
- Windows8.1进入IIS管理器的方法
- HBase 系统架构
- Android学习笔记之短信验证码的获取和读取
- 读取Excel的内容
- js返回上一页并刷新的方法
- 一个解决OpenCV ffmpeg的链接错误的解决方法
- AM335x bootloader
- 细思极恐!带指纹解锁的手机更安全吗?
- Linux中的内存管理
- Activity的生命周期全面分析
- applicationContext.xml文件加入 实体与表的映射文件(.hbm.xml),报错Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
- zookeeper 性能测试
- Dubbo框架使用
- 编程练习---分金币
- svn