B树正式认识
首先纠正一个概念,有些人会说什么B树和B-树,这俩其实是一样的,都是B树就对了!
对于B树,它是一种自平衡的树,也就是平衡被破坏后需要进行操作重新达到平衡!学习这个B树之前,你需要了解:
-
二叉查找树
-
AVL树
-
2-3树
当然,上述你不了解你也可以直接学习B树,只不过会更加费劲而已,了解了上述三种树之后再看B树,你就会觉得清晰很多!
首先B树和2-3更加相似一点,主要就是体现在不像之前咱们常见的那种二叉树,只有两个叉,也就是只有左右孩子,像2-3树就可以拥有三个孩子节点~
对于B树也是类似的,不是只有两个叉,可以有2个以上的子节点!
另外,对于B树这种数据结构,经常用在数据库和文件系统上~
主要是因为B树每个节点可以存储多个数据以及可以有2个以上的子节点从而减少磁盘IO,进而提升搜索性能等!
总结起来一句话就是:
B树是一种多路的平衡搜索树
解读下这里的几个概念,首先什么是多路,其实简单,就是可以有多个叉,不仅仅是二叉树那样最多两个子节点,多路就可以有多个节点!
然后是平衡,这个就是会有一个平衡的条件,就是达到什么样才算平衡!
比如之前学习的AVL树就是左右字数高度差不大于1,一旦不满足平衡就要想办法让其平衡,这就是所谓的平衡树!
那搜索树呢?
记住核心就是比左边的大,比右边的小!
ok,关于什么是B树,我们通过文字叙述了一遍!那接下来我们画图来给大家直观的看下,B树长什么样子:
以上就是一棵3阶B树,那有人会不会说,有没有4阶B树?当然有,如下:
看到这个大家就可以大胆猜测一下,**这几个几阶B树是如何判断的?**可以想一下咱们之前讲解2-3树的时候提到的2-节点和3-节点!
说到这里,大家也可以思考下,这个B树和2-3树的区别~
对于2-3树,最多的就是3-节点可以拥有两个数据和三个子节点,但是我们看这个B树,是不是还可以一个节点拥有三个数据以及四个子节点,比如这个:
然后我们再看,这些节点保存的数据有什么特点?是不是依然是比左边的都大,比右边的都小?
有人可能疑惑,这一个节点存好多数据怎么比较,这个其实也简单,如果存多个数据,我们就拿最大和最小的数据去比较,比如这个:
最小的数据25是不是比左字数中所有的数据都大,然后再看:
最大的数据90是不是也要比右子树中的数据都小!那接下来稍微有点难比较的就是中间节点的比较,其实也很简单,我画个图:
该节点的三个数值分别是25,32和90,有三个数据,然后有四个子节点,最小的数据25一定是大于左子树中的所有数值(22和23)~
最大的数据90一定是小于右子树中所有的数值(100),那中间的俩节点数值26和33正好是处于25和32之间,以及32和90之间!
如果把它给压平了一定是从左至右,依次变大的,也就是这样:
所以,B树是拥有二叉查找树的性质的,并且这个大小关系和2-3树是一样的,这就是B树了,以后别人再问你心里有没有点……知道该怎么回答了吧!
B树的直观印象
接下来我们来看下B树一眼看上去,有啥特点,首先,还是上面给大家举例的这棵3阶B树:
就它,一眼看上去,有啥特点,首先想下2-3树,是不是和2-3树一样,绝对平衡,也就是每一个节点的所有子树高度都是一致的~
另外还有一个特点,就是B树是不是比较矮,如果上面这些数据存储到二叉树的话,一定是比较高的,就是细长细长的!
为什么在B树这里就比较矮?想必你也想到了,就是因为对于B树来说,它的一个节点可以存储多个数据,以及每个节点可以有多个子节点,所以B树一般比较矮,比较宽!
对了,不知道大家看到这里会不会有这样一个疑惑:
为什么叫做B树啊,咋不是C树,D树?
有一种说是说这种树非常平衡,英文叫做Balanced Tree,这个Bal