B树

B树

难点。

回顾:二叉查找树(BST)

typedef struct{
    int key;
    struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;

能否变为m叉查找树?

五叉查找树

struct Node{
    ElemType keys[4]; //最多4个关键字
    struct Node *child[5];	//最多5个孩子
    int num;			//结点中有几个关键字
}

最少1个关键字,2个分叉

最多4个关键字,5个分叉

结点内关键字有序

如何查找

区间里判断左边还是右边

一开始,9比22小,走22左边的指针路线

9在下一层的这里对比,比5大,指针往右移,和11对比,比11小,走11左边的指针路线

9在第三层这对比,比6大,指针右移,比8大,指针右移,到9相等。找到

一开始,41比22大,走22右边的指针路线

到下一层,41比36大,指针右移,和45对比,比45小,走45左边指针路线

到第三次,比40大,指针右移,比42小,走42左边指针路线,等于null,查找失败

每个结点都可以用折半查找哦

如何保证查找效率

策略:m叉查找树中,规定除了根节点外,任何结点至少有(向上取整m/2个)分叉

,即至少含有有(向上取整m/2 -1)个关键字

向上取整!!

例如:5叉排序树,规定除了根节点外,任何结点都至少有3个分叉,2个关键词

不够平衡也效率差

策略:m叉查找树中,规定对于任何一个结点其所有子树的高度都要相同

B树

总结一下:

B树的高度

知识回顾

原文地址:https://www.cnblogs.com/jev-0987/p/13307761.html