知识点汇总
一、从搜索树到B+树
1.1 二叉搜索树
左节点都比自己小,右节点都比自己大。
时间复杂度:O(logN)
1.2 平衡二叉树
avl树
1.3 红黑树
特有规则:
- 每个节点不是红色就是黑色
- 根节点是黑色
- 每个叶子节点都是黑色的空节点
- 红色节点的两个字节点都是黑色的
- 任意节点到其叶节点的每条路径上都包含相同数量的黑节点
1.4 B树
B树是一种多叉树,也叫多路搜索树,适合用于文件索引上,减少磁盘IO次数,子节点存储最大数成为B树的阶,图中为2-3树。
m阶B树特点:
- 非叶节点最多有m棵子树。
- 根节点最少有两棵子树,非根非叶节点最少有m/2棵子树。
- 非叶节点保存的关键字个数等于该节点子树个数-1。
- 非叶节点保存的关键字大小有序。
- 节点中每个关键字左子树的关键字都小于该该关键字,右子树的关键字都大于该该关键字。
- 所有叶节点都在同一层。
查找:
- 对节点关键字进行二分查找。
- 如果找不到,进入对应的子树进行二分查找,如此循环。
1.5 B+树
B树的变种,拥有B树的特点
独有特点:
- 节点中的关键字与子树数目相同。
- 关键字对应的子树节点都大于等于该关键字,子树包含该关键字自身。
- 所有关键字都出现在叶节点之中。
- 所有叶节点都有指向下一个叶节点的指针。
搜索:只在叶节点搜索。
叶子节点保存关键字和对应的数据,非叶节点只保存关键字和指向叶节点的指针,同等关键字数量的B树和B+树,B+树更小。
更适合做索引系统,原因:
- 由于叶节点有指针项链,B+树更适合做范围检索。
- 由于非叶节点只保存关键字和指向叶节点的指针,B+树可以容纳更多的关键字,树层数变小,磁盘查询次数更低。
- B+树的查询效率比较稳定,查询所有关键字的路径相同。(MySQL索引就提供了B+树的实现方式)