1. m路查找树
与二叉排序树类似,可以定义一种“m叉排序树”,通常称为m路查找树。
一棵m路查找树,或者是一棵空树,或者是满足如下性质的树:
① 结点最多有m棵子树,m-1个关键字,其结点结构如下图所示:
其中,n为关键字的个数,Pi(0<=i<=n)为指向子树根结点的指针,Ki(1<=i<=n)为关键字。
② Ki<Ki+1,1<=i<=n-1
③ 子树Pi中的所有关键字均大于Ki且小于Ki+1,1<=i<=n-1
④ 子树P0中的关键字均小于K1,而子树Pn中的所有关键字均大于Kn
⑤ 子树Pi也是m路查找树,0<=i<=n
2. B树
一棵B树是一棵平衡的m路查找树,它或者是空树,或者是满足如下性质的树:
① 树中每个结点最多有m棵子树。
② 根结点至少有两棵子树。
③ 除根结点之外的所有非叶结点至少有⌈m/2⌉棵子树。
④ 所有的叶结点出现在同一层上,并且不含信息,通常称为失败结点。失败结点为虚结点,在B树中并不存在,指向它们的指针为空指针。引入失败结点是为了便于分析B树的查找性能。
B树结点结构:
typedef int KeyType;
/*B树结点存储结构*/
typedef struct Mbtnode {
struct Mbtnode* parent; //指向双亲结点的指针
int keynum; //结点关键字个数
KeyType key[m + 1];