数据结构与算法 B树
文章目录
关于二叉树、二叉搜索树、平衡二叉树、B树、B+树的精确定义和区别探究参考博客
关于二叉树、二叉搜索树、平衡二叉树、B树、B+树的精确定义和区别探究
https://www.cnblogs.com/williamjie/p/11081096.html
1、在了解红黑树之前,可以先来了解B树,对于红黑树的理解将会更加好一些;
2、B树的特点
B树是一种平衡的多路搜索树,多数使用在了文件系统,数据库的实现
B树的特点:
1、一个结点可以存储的结点有多个
2、拥有二叉搜索树的性质
3、是平衡的,每个结点的所有子树高度都是一致的
4、高度低一些
3、为什么叫做 B 树?
1、balance tree 它是非常的平衡的(平衡是表现在树的高度上面的)
4、几阶B 树的相关定义
树里面拥有的最多子节点的数目,就是叫做 几阶 B 树,如上面的图所示;(体现在拥有最多子节点数目的节点上面)
5、 m 阶B 树的定义
当 m = 2 的时候,就是二叉搜索树,一般情况下,是不会使用 m = 2 的;
6、B树和二叉搜索树之间的联系
把二叉搜索树的部分父子结点合并之后,就可以形成一颗m 阶B树
关于最下面的对数问题: m 指的是 m 代合并之后,拥有的子节点的数量;简单的对数计算
四阶B树的意思就是某个结点最多拥有四个子节点
7、使用 B 树完成搜索
8、使用 B 树完成添加
添加的元素一定添加到叶子结点的位置的;
8.1、上溢现象的产生
4 阶B 树,最大的子节点不能超过 3 个元素,此时是存在问题的;
8.2、**添加的元素必定是添加到叶子结点中
9、上溢现象的解决
上溢,像上面传递,然后裂开,一直到不上溢为止;
10、删除操作
10.1、删除叶子结点
10.2、删除非叶子结点
不能随意的直接删除 60 因为 B树 需要满足的是:上面和下面的元素之间的差距不能超过一,所以找到它的前驱或者后继元素进行元素的覆盖即可;
前驱结点:左子树的最右边
后继节点:右子树的最左边
10.3、小结 **真正的删除元素是叶子结点的元素的删除
11、删除续集 - 下溢的处理
5 阶B树每个节点中至少存在 2 的元素,最多存在 4 个元素,删除了 22 会导致存在的最少元素不存在,所以需要处理;
m 表示的是树的阶数 ,也就是树种的某个节点拥有的最多的子节点的数目
比最低的限制低了,会导致不满足 5 阶B树的相关定义;
为什么一定是等于ceil(m / 2) - 2?
因为最小就是 ceil( m / 2) - 1,比最小的小就发生下溢了,这个时候就是需要进行处理的;
几点小 tips :
1、为什么不能直接把 a 放在了 b 的位置?
因为直接放过去会影响到了二叉搜索树的结构,所以采取了这样的一种旋转的策略,保证了搜索树的结构的存在;
如果旁边的兄弟也是没有东西可以借给右边的时候,应该怎么进行处理呢?看下面的处理方式,上面去一个元素,并且与下面的元素进行合并;
11.1、小结
一个结点发生了下溢之后,首先向旁边的兄弟借元素;旁边也没有,向着父节点要一个,然后三个进行合并成为一个结点,这个设计刚刚好,节点里面的元素也是不会超过的;父节点也发生下溢的话,继续向着上面的元素要一个,然后合并;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!