一.B树(也叫B-)与B+树专题
(1)B树
重点总结:
1.结点最大的孩子数目称为B树的阶。所以,2-3树是3阶B树,2-3-4树是3阶B树
2.所有叶节点位于同一层次
3.
4.,一般均是升序或降序
5.在B树上查找的过程是一个顺指针查找结点和在结点中查找关键字的交叉过程。
6.B树的数据结构就是为了内外存的数据交互准备的。
7.B树中一个关键字只能在树中某一个节点上出现,且节点内部关键字是有序排列的。
(2)B+树
重点总结:
1.每一个叶子结点都会保存一个指向后一叶子结点的指针。
2.适合带有范围的查找(随机查找,顺序查找都成)
3.
4.
5.
(3)习题巩固
2-13:叶节点之间互相并不链接
2-14:
最少为ceil(m / 2)。
2-15:B+树解决的就是这个问题
2-17:C是肯定的,因为
D的话根节点除外
B肯定错
A我暂时不知道(这块实在学的不精。。。)
补充一道和链表有关的与b树无关的查找题
二.散列(哈希)专题
解析及知识点补充:
2-2:哈希查找不能顺序查找 ,与结点个数无关
2-3:可能有冲突啊
2-7:下图够详细了吧嘿嘿
2-8:就是不能有冲突
2-9:
要注意不是6/11而是5/11=0.45哦,因为发现有冲突时 不算当前元素
2-10:
关于查找成功与不成功总结一下:
成功就是把每个冲突次数加1再加在一块除以元素个数
不成功就是数离最近的空格的个数(要加上自己本身!!!)
所以这个题就是(5+4+3+2+7*1)/11=21/11(前面可不是4+3+2+1哦)
2-12:
这个有可能没学过,就是
就是
再补充几道:
这个是平方探测,没啥难的其实也
三.平衡二叉树(动态查找表)
要注意平衡二叉树也是二叉搜索树,插入的过程要注意把结点调平衡(边插入边调整)
方法不会的话参见这篇博客:https://blog.csdn.net/weixin_42110638/article/details/83963954
解析:
2-3:看下图
2-4:
这里有俩公式
1:
最大高度是[log2(n)]+1;
2:
这个题问最大,那你就算一下log2(12)=3.59,取整为4,+1等于5
当然用递推也是可以的
第一到五层最少的节点数分别是1,2,4,7,12
2-5,6,9同理(前两个注意下开始位置)
但2-9要注意一下,如果你用递推公式来算,28介于20(第六层)与33(第七层)之间
这时树的最大深度最多到6,可不是7哦(原因自己想)
2-7:
要注意平衡因子为左子树树高减去右子树树高
2-8:看图,C不需要调整的,D是RL旋转
2-10:
看图就好,主要要学会LR和RL旋转方法(都是把最中间大小的树提上来),别搞错了
四.KMP算法
参考博客:https://blog.csdn.net/nanami809/article/details/49367159