持续学习&持续更新中…
学习态度:守破离
本节课学习B树是给红黑树打基础,不敲代码。
基本概念
-
B树是一颗平衡的多叉树(平衡的多路搜索树)
-
// B树之所以叫做B树的原因,有一种说法是:Balanced Tree(非常平衡)
-
B树拥有二叉搜索树的一些性质:小的在左边,大的在右边。
m阶B树的性质
-
m阶的意思是:一个节点最多拥有m个子节点
-
m >= 2 (至少是二阶)
- 思考:为什么要求节点存储元素的个数
<= m-1
?
y(某节点的子节点个数) = x(某节点存储的元素个数) + 1
B树和二叉搜索树
给你一颗二叉搜索树,将某些父子节点进行合并的话,就能变为一颗B树。
超级节点:能够存储多个元素的节点。
- 将二叉搜索树2代合并:
也可以这样合并:
- 将二叉搜索树3代合并:
搜索(查询)
添加
新添加的元素必定是添加到叶子节点当中的
添加—上溢
上溢到根节点是唯一一种能让B树长高的方法。
删除
真正被删除的元素都是在叶子节点当中
删除叶子结点
删除非叶子结点
删除—下溢
下溢到根节点是唯一一种能让B树变矮的方法。
四阶B树
作业:将四阶B树从1添加到22、从1删除到22
作业——添加
新添加的元素必定是添加到叶子节点中
分析:
- 四阶B树根节点存储元素个数为1 <= m <= 3
- 四阶B树非根节点存储元素个数为1 <= m <= 3
- 四阶B树根节点拥有子节点个数为2 <= y <= 4
- 四阶B树非根节点拥有子节点个数为2 <= y <= 4
综上:四阶B树每个节点都可存储[1, 3]个元素,每个节点都可拥有[2, 4]个子节点
添加1:
添加2:
添加3:
添加4:
添加5:
添加6:
添加7:
添加8:
添加9:
添加10:
添加11:
添加12:
添加13:
添加14:
添加15:
添加16:
添加17:
添加18:
添加19:
添加20:
添加21:
添加22:
作业——删除
真正的删除都发生在叶子节点中
分析:
① 删除操作:
-
删除叶子节点:直接删除
-
删除非叶子节点:找到该节点的前驱或后继节点node,用node的值来覆盖需要删除节点的值,然后删除node(相当于删除叶子节点,因为非叶子节点的前驱或后继元素,必定在叶子节点中)
② 下溢:当叶子节点删除掉一个元素后,元素个数低于最低限制(ceiling(m 除以 2) - 1)时,这种现行成为下溢
- 如果下溢节点临近的兄弟节点有至少ceiling(m 除以 2) 个元素,那么使用如下操作:
- 如果下溢节点临近的兄弟节点有至少ceiling(m 除以 2 - 1) 个元素,那么使用如下操作:
删除1:
删除2:
删除3:
删除4:
删除5:
删除6:
删除7:
删除8:
删除9:
删除10:
删除11:
删除12:
删除13:
删除14:
删除15:
删除16:
删除17:
删除18:
删除19:
删除20:
删除21:
删除22:
参考
小码哥李明杰老师课程: 恋上数据结构与算法 第一季.
本文完,感谢您的关注支持!