感觉这个写的很好,校招偶然发现的,后来电脑重装,花了好长时间就为了找这篇文章。
https://www.toutiao.com/?wid=1710768300266
平衡二叉树
二叉排序树:左边根节点比右边根节点小,并且左右子树都是二叉排序树。
在有序插入的时候就会退化成链表。
为了保证平衡(降低树的高度)就引入平衡二叉树,红黑树就是平衡二叉树的一种。
B树
B树就是多路搜索树,N路的B树最多能有N个叶子节点。这样设计也是为了进一步降低树的高度。
但是设计成无线多路的话就会退化成数组。
B+树
是B树的一种,他的数据都在叶子节点上,同时叶子节点之间使用指针相连。形成一个链表结构。
为什么不用数组。
文件系统和数据库的索引都是存在硬盘上的,并且如果数据量大的话,不一定能一次性加载到内存中。
为什么不用B树
数据库中select数据,不一定只选一条,很多时候会选多条,比如按照id排序后选10条。
如果是多条的话,B树需要做局部的中序遍历,可能要跨层访问。而B+树由于所有数据都在叶子结点,不用跨层,同时由于有链表结构,只需要找到首尾,通过链表就能把所有数据取出来了。
而且数据库中的索引一般是在磁盘上,数据量大的情况可能无法一次装入内存,B+树的设计可以允许数据分批加载,同时树的高度较低,提高查找效率。