多路查找树
二叉树的问题分析:
- 二叉树在构建时,需要进行多次i/o操作(海量数据存在数据库或文件中),节点很多的话,构建速度会有影响。
- 节点很多,会造成二叉树过高,降低操作速度
我们就可以引入多叉树,多叉树每个节点可以有更多的数据项和更多的子节点。
一个多叉树的例子
B树:
通过重新组织节点,降低树的高度,并且减少i/o读写次数来提升效率。
2-3树
2-3树是最简单的B树结构
- 所有叶子节点在同一层(B树都满足这个条件)
- 有两个节点的节点叫做二节点,二节点要么没有子节点,要么有两个子节点
- 有三个节点的节点叫做三节点,三节点要么没有子节点,要么有三个子节点
- 2-3树是由二节点和三节点构成的树
插入规则:
所有叶子节点都在同一层,且符合B树结构。
除2-3树以外,还有234树等等
B树,B+树,B*树
B树的每个节点都存储数据,搜索可能在非叶子节点结束
B+树只有叶子节点可以存储数据,它的叶子节点是一个链表,链表中的关键字是有序的;在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。
B+树改进了B树, 让内结点只作索引使用, 去掉了其中指向data record的指针, 使得每个结点中能够存放更多的key, 因此能有更大的出度. 这有什么用? 这样就意味着存放同样多的key, 树的层高能进一步被压缩, 使得检索的时间更短.
B*树在B+树的非根和非叶子节点再增加指向兄弟的指针