You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
为弥补红黑树高度不可控问题,提出多叉搜索树,即为B-树
|
|
|
|
|
B树满足一下条件:
|
|
|
|
|
1. 树中每个节点至多有M个孩子节点(即至多有m-1个关键字)
|
|
|
|
|
2. 除根节点外,其他节点至少有m/2个孩子节点
|
|
|
|
|
3. 若根节点不是叶子节点,则根节点至少有2个孩子节点
|
|
|
|
|
4. 所有叶子节点都在同一层上,即B树是所有结点的平衡因子均等于0的多路查找树。
|
|
|
|
|
|
|
|
|
|
如下图所示一颗3阶b树:
|
|
|
|
|
![[微信截图_20221216171144.png]]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每个节点都会存储key、data、指针(如图5阶B树)
|
|
|
|
|
![[1446087-bc023e47bc74cfa1.webp]]
|
|
|
|
|
|
|
|
|
|
## B-tree的插入:
|
|
|
|
|
与BST相同,比较大小后判断放在左还是右
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## B-tree的删除:
|
|
|
|
|
需要先判断节点是否富有,富有:删除一个key,剩余key的数量大于等于(m/2)向上取整-1。
|
|
|
|
|
节点如果不富有需要从兄弟、父亲节点借。如果都不富有,只能降低树的高度。具体过程参考B站:站长数据结构
|
|
|
|
|
|
|
|
|
|
B-tree模拟 [B-Tree Visualization (usfca.edu)](https://www.cs.usfca.edu/~galles/visualization/BTree.html)
|