80 lines
1.1 KiB
Markdown
80 lines
1.1 KiB
Markdown
# B树
|
|
|
|
一种多路平衡查找树。
|
|
|
|
能保证数据插入和删除情况下,任然保持执行效率。
|
|
|
|
一个M阶的B树满足:
|
|
|
|
1. 每个节点最多M个子节点
|
|
2. 除跟节点和叶节点外,其它每个节点至少有M/2个孩子
|
|
3. 根节点至少2个节点
|
|
4. 所有叶节点在同一层,叶节点不包含任何关键字信息
|
|
5. 有k个关键字的页节点包含k+1个孩子
|
|
|
|
也就是说:`根节点到每个叶节点的路径长度都是相同的。`
|
|
|
|
|
|
|
|
## 数据结构
|
|
|
|
|
|
```
|
|
typedef struct Item{
|
|
int key;
|
|
Data data;
|
|
}
|
|
|
|
#define m 3 //B树的阶
|
|
|
|
|
|
typedef struct BTNode{
|
|
int degree; //B树的度
|
|
int keynums; //每个节点key的个数
|
|
Item items[m];
|
|
struct BTNode *p[m];
|
|
}BTNode,* BTree;
|
|
|
|
|
|
typedef struct{
|
|
BTNode *pt; //指向找到的节点
|
|
int i; // 节点中关键字的序号 (0,m-1)
|
|
int tag; //1:查找成功,0:查找失败
|
|
}Result;
|
|
|
|
|
|
Status btree_insert(root,target)//插入B树节点
|
|
Result btree_find(root,target)//查找B树节点
|
|
Status btree_delete(root,target)//删除B树节点
|
|
```
|
|
|
|
|
|
## 插入B树节点
|
|
|
|
|
|
|
|
|
|
## 查找B树节点
|
|
|
|
|
|
|
|
|
|
## 删除B树节点
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|