【发布时间】:2015-06-17 06:47:02
【问题描述】:
如果我有一个 4 阶 的 B-Tree,其中包含以下数据...
我需要在树中添加 2;我...
- 将 2 添加到节点(使其无效,因为它现在有 4 个键),然后拆分节点,将值 2 作为中间值并向上传播
或
- 我是不是不加2,取3作为中间值,向上传播3,再把2加到正确的节点上?
请原谅这张糟糕的图表。
【问题讨论】:
标签: b-tree
如果我有一个 4 阶 的 B-Tree,其中包含以下数据...
我需要在树中添加 2;我...
或
请原谅这张糟糕的图表。
【问题讨论】:
标签: b-tree
您执行第一个选项。对于任何顺序的 B 树,您总是添加节点,然后执行向上传播的拆分。为了对数据结构上的各种基本(插入、删除、搜索)操作进行精彩的交互式演示,我可以访问位于here 的有用的算法可视化页面。找到B-tree页面,你会发现它执行了选项1。
【讨论】:
如何找到向上推的元素:
1)将元素推入Btree的合适位置,检查是否溢出。
如果然后按照下面给出的步骤 2 和 3。
2)找到CEILING((order of Btree+1)/2)。
3) 向上移动索引元素,给出左右子树的两个指针。
注意:先插入元素,如果溢出则按照步骤2和3进行。
在此示例中,首先插入 2。
树的部分叶子变成|1| 2| 3| 5|。
发生溢出是因为任何节点中只能有 3 个键。
求上限 ((4+1)/2)= 上限(5/2)= 3(索引号)
第三个索引值 3 是中间元素。所以传播它。 3的左指针指向1|2,右指向5。
【讨论】: