这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
B-树(B树:多路搜索树 不像二叉树 只有两路)
什么条件才能满足时一棵B树呢? 一颗 m 阶的 B-树(也可以知道:这颗B树最多有m个分支) 需要又以下的特点:
- 每一个结点最多有m个分支
- 若根结点非叶子结点,则它至少有两个分支 最多肯定时m啦
- 那中间结点,它至少有p个分支 (⌈m⌉<= p <= m 例如m=3,则2<= p <= 3)
- 叶子结点都再同一层上,而这些结点都不存在,指向这些结点的指针都为 NULL
- 非终端结点包含的信息数据可以表示为(n,A0,K1,A1,K2,…,Kn,An) 其中K1,K2...是关键码 且Ki<Ki+1;A1,A2,....是指向孩子的指针,如A0(指向的所有关键码)<K1(指向的所有关键码<A1,A2,...(指向的所有关键码 其中关键码个数n **⌈m/2⌉-1 <= n <= m-1 **
如下图是一颗四阶B-树 深度为4
我们来熟悉上面的特点:
- a是根结点 有2个分支
- 中间结点的分支范围 2<=p<=4 也都符合
- 如a结点中n=1,关键码35 指向最左边孩子指针 且18<35,指向最右边孩子指针C,其中n=2,43,78都大于35 且43<78所以也符合。
在了解了B-树之后 那就不得不来聊一聊B+树
B+树
一课B+树需要满足如下条件:
- 每一个结点最多有m个分支
- 若根结点非叶子结点则至少2棵子树,其他的中间结点至少⌈m/2⌉
- 结点的孩子个数等于关键字的个数
- 所有的叶子结点包含全部关键字以及指向相应记录的指针 且在叶结点中关键字是有顺序的
看图:
我们和上面的B树相比,B树的叶子结点是不存任何信息的 并且其叶子结点个数是关键字个数+1,而B+树叶子结点有内容并且包含了所有的关键字,即使出现在非叶结点的关键字也会出现在叶子结点。
今天终于分享了B树与B+树基本的内容 下一次将会继续分享他们的插入和删除!