- 树的常见机构
树无非就是二叉树,二叉搜索树,平衡二叉树、高级一点的有红黑树、B树、B+树....
- 简单了解红黑树
其实我们在面试时,并不是要知道它的定义或者如何去设计它,而面试官真正想从你那里知道为什么这样设计,它的使用场景有哪些。
其实,红黑树就是从二叉树演变而来。
二叉树:左边的节点比根节点小,右边比根节点大,类似于这种
但是,如果插入的树变成了有序的,二叉树就退化成链表。所以,就引入了红黑树,就是为了保证树的平衡
那为什么一定要保证树的平衡呢?
因为树的查找性能取决于树的高度,让树竟可能平衡,就是为了降低树的高度。
- B树了解
B树是一种多路搜索树,它的每个节点可以拥有多余两个孩子节点,M路的B树最多能拥有M个孩子节点
为什么要设计成多路呢?
主要还是为了降低树的高度,路树越多,高度越低,查找的性能越高。
如果不限制路树,这样就退化成了有序的数组了
这就好比文件系统一样,索引是用B树,而不是用红黑树或者有序数组。
文件系统和数据库的索引是存在硬盘上的,如果数据量大的话,不一定能一次加载到内存中。
- B+树
B+树是在B树的基础上改造,它的数据都在叶子节点,同时,叶子节点之间还加了指针形成链表
这是一个4路B+树,它的数据都在叶子节点,并且有链路相连。
为什么要这样设计呢?
B+树在数据库的索引中用到最多,数据库的select操作,有时会查找多条,B树查询需要做局部的中序遍历,可能要跨层访问,而B+树所有的数据都在叶子节点,不用跨层,同时有链表结构,只需要找到首尾,通过链表就能把所有数据查询出来
比如,找7~9,只需要在叶子节点中就能找到。
- 总结
如果只选一个数据查询,hash查询效率更快,但是如果查询多条数据,由于B+树索引有序,它的查询效率就比hash快很多了。
而且,数据库的索引一般是存在磁盘上,数据量大的情况下无法一次装入内存,B+树的设计可以允许数据分批