多叉树与B树区别:
1. 多叉树没有约束平衡
2. 多叉树没有约束每个节点的子树个数
内存与磁盘区别:
1. 内存块,磁盘慢
2. 断电以后内存数据消失,磁盘持久存储
磁盘的慢是慢在寻址。磁盘使用红黑树来进行寻址。
为了减少寻址次数,就有了多叉树 b树。
1个1024叉的B树,最小单位是4K,要寻址4G的内存,只需要2次寻址找到对应的单元。
B-树的性质:
一颗M阶B树T,满足以下条件:
1. 每个节点至多有M棵子树
2. 根节点至少拥有两棵子树
3. 除了根节点以外,其余每个分支结点至少拥有M/2棵子树
4. 所有的叶节点都在同一层上(那么一定平衡)
5. 有k棵子树的分支结点则存在k-1个关键字,关键字按照递增顺序进行排序(类比排序,5个人排序,可以有6个人插到队列里)
6. 关键字数量满足ceil(M/2)-1<=n<=M-1
#define M 6
#define DEGREE 3 //M/2
typedef int KEY_VALUE;
struct btree_node{
KEY_VALUE *keys; //malloc
struct btree_node **childrens;
int num; //当前节点个数
int leaf; //是否是叶子结点
};
struct btree{
struct btree_node *root;
};
再添加key的时候,先分裂再添加。分裂有两种情况&#