你心里有没有点B树?

tech2024-10-29  27

1. 概念

        B树,是一种多路平衡搜索树,多用于文件系统、数据库的实现。B树中所有节点拥有的子节点数(指针数)的最大值称为B树的阶,如3阶B树他的子节点个数最大为3个。         可以通过这个可视化数据结构网站自己对照模拟一遍,会更容易掌握的。选择B Trees,就可以进入到页面创建B树了,选择相应的阶数即可。点这里,进入可视化数据结构网站

2. B树的特点

        B树有以下特点:             1. 每个节点可以存储多个元素(n)、可以拥有多个子节点(n + 1);             2. 拥有二叉树的一些性质,元素都是有序的;             3.极度平衡,每个节点的所有子树的高度一致;             4.整个树的高度非常矮,存储元素个数也非常多;

3. B树的性质

        m阶B数的性质:             1.m阶B树满足以下性质;             2.根节点的元素个数必须1 <= x <= m - 1;             3. 非根节点的元素个数必须为┌ m / 2 ┐ - 1 <= x <= m - 1 (┌ ┐向上取整);             4.如果一个节点中的元素个数为x,并且有子节点,那么子节点个数为y = x + 1那么作为根节点的子节点个数为2 <= y <= m,作为非根节点的子节点个数为┌ m / 2 ┐ <= y <= m;

4. B树的节点搜索操作

        B树的搜索步骤和二叉搜索树类似:             1.先从节点内从小到大开始搜索元素;             2. 如果命中,搜索结束;             3. 如果未命中,在去对应的子节点中搜索元素,重复1,2步骤;

5. B树的节点添加操作

        B树的添加,新添加的元素必定是添加到叶子节点上,如果叶子节点上的元素个数满足m阶B树的性质,那么就符合条件无需处理。但是如果插入到叶子节点上的个数超过B树的阶数,那么需要进行上溢处理。

        上溢解决(上溢节点的个数必定等于m):             1.找出产生上溢的那个节点最中间的位置的元素b;             2.将b位置的元素向上与父节点进行合并;             3. 然后将[0,b - 1]和[b + 1,m]位置的元素分裂成两个子节点,作为上溢元素的左右子节点;             4. 检查父节点是否发生上溢,如果父节点发生上溢,那么执行1,2,3步骤,直到上溢问题解决;

6. B树的节点删除操作

        B树的删除操作,如果删除的元素在叶子节点,那么直接删除即可。如果删除元素在非叶子节点,那么需要以下步骤:         1. 先找到他的前驱或后继元素,覆盖所需要删除的元素值;         2. 在把前驱或后继元素删除;         由此可知,不管是叶子节点删除,还是非叶子节点删除。真正的删除元素都是发生在叶子节点上。如果在删除叶子节点的时候,节点的元素数量为┌ m / 2 ┐ - 1,那么需要进行下溢操作,下溢节点的元素数量必然等于┌ m / 2 ┐ - 2.

        下溢解决:         1. 如果下溢节点临近的兄弟节点,有至少┌ m / 2 ┐个元素,可以向其借一个元素a,然后将其父节点的元素b插入到下溢节点的0位置,把元素a替换到父节点元素b的位置 (旋转操作);

        2. 如果临近的兄弟节点,只有 ┌ m / 2 ┐ - 1个元素,那么将父节点的元素b挪下来跟左右子节点进行合并,并且非常巧妙的是合并的元素个数为┌ m / 2 ┐ + ┌ m / 2 ┐ - 2不会超过m - 1,这个操作可能会导致父节点产生下溢 ,然后尝试执行1,2步操作。

最新回复(0)