![一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树](http://img.jiangsulong.com/230829/1AZ3G06-0.jpg)
文章插图
我们假设B+树一个节点可以有100个关键字,那么3层的B树可以容纳大概1000000多个关键字(100+101100+101101*100) 。而红黑树要存储这么多至少要20层 。所以使用B树相对于红黑树和AVL可以减少IO操作大纲在了解 B树、B+树、AVL树、红黑树 之前,我们先看一下各种树型结构的大致实际应用场景:
B和B+树:主要用在文件系统以及数据库中做索引等AVL树:平衡二叉树之一,应用相对其他数据结构比较少,windows对进程地址空间的管理用到了AVL红黑树:平衡二叉树,广泛应用在C++STL中,比如map和set,JAVA的TreeMap
树结构已经有了很多种形式,为何出现 B树、B+树、AVL树、红黑树?下面我们按照这个大纲来看一下这些问题?
![一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树](http://img.jiangsulong.com/230829/1AZ3N21-1.jpg)
文章插图
二叉搜索树概念二叉搜索树 (平衡二叉树) 是采用二分法思维把数据按规则组装成一个树形结构的数据,用这个树形结构的数据减少无关数据的检索,大大的提升了数据检索的速度 。
我们在二叉搜索树的深度遍历过程中,使用中序遍历,就能获取得到有序的序列 。
![一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树](http://img.jiangsulong.com/230829/1AZ32921-2.jpg)
文章插图
特点
- 如果任意节点左子树不为空,则左子树的值均小于根节点的值 。
- 如果任意节点右子树不为空,则右子树的值均大于于根节点的值 。
- 任意节点的左右子树也分别是二叉查找树 。
- 没有键值相等的节点 。
【一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树】出现一些特殊的情况的时候,会导致搜索节点的时间复杂度变高 。什么特殊情况呢?下面请试着在二叉查找树中依次插入10、11、9、8、7、6、5、4,看看会出现什么 ? 好好的一个二叉树,变成“跛脚”啦!
![一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树](http://img.jiangsulong.com/230829/1AZ31222-3.jpg)
文章插图
不只是外观看起来变得怪异了,查询节点的时间复杂度也退化成了O(n) 。怎么解决这个问题呢?这就涉及二叉树的自平衡 了 。二叉树自平衡的方式有多种,如红黑树、AVL树等,这两种我们在后面会介绍到,我们先来看一下B树和B+树 。
B树概念B树又名平衡多路查找树(也把B树称为B-树)查找路径不只两个,不同于常见的二叉树,它是一种多叉树,我们常见的使用场景一般是在数据库索引技术里,大量使用者B树和B+树的数据结构 。
![一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树](http://img.jiangsulong.com/230829/1AZ31043-4.jpg)
文章插图
B树大多用在磁盘上用于查找磁盘的地址 。因为磁盘会有大量的数据,有可能没有办法一次将需要的所有数据加入到内存中,所以只能逐一加载磁盘页,每个磁盘页就对应一个节点,而对于B树来说,B树很好的将树的高度降低了,这样就会减少IO查询次数,虽然一次加载到内存的数据变多了,但速度绝对快于AVL或是红黑树的 。
特点:
- 所有键值分布在整个树中(区别与B+树,B+树的值只分部在叶子节点上)
- 任何关键字出现且只出现在一个节点中(区别与B+树)
- 搜索有可能在非叶子节点结束(区别与B+树,因为值都在叶子节点上,只有搜到叶子节点才能拿到值)
- 在关键字全集内做一次查找,性能逼近二分查找算法
- 如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,
- 通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,
- 通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO 。
![一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树](http://img.jiangsulong.com/230829/1AZ34b1-5.jpg)
推荐阅读
- 一文吃透JVM分代回收机制
- 一文看懂 Git 的底层工作原理
- 两年法考差1分通过,是不够努力吗,复习建议等一文全攻略
- 一文解析「小米大模型」
- 一文带您了解线性回归:多个变量之间的最佳拟合线的算法
- 主动离职,还能收获失业补助金?你不知的“隐藏”福利,一文解析!
- 为什么很多人都在吹ChatGPT改变世界?一文全面了解
- 一文带您了解向量数据库
- 一文读懂医保亲情账户
- 一文了解Redis哨兵模式