{{1}}
我的方法不知何故是段错误。我们如何为B-tree编写正确的inOrder Traversal?
答案 0 :(得分:1)
当你在一片叶子时,这可能是最后一次横越电话。我不认为需要这种遍历。
答案 1 :(得分:0)
假定BTreeNode是b树节点的通用定义,而T1是键的类型,T2是树中值的类型,sortedKeys是您要使用的列表,则可以使用以下命令递归方法。这个想法非常类似于二叉搜索树中的inOrder遍历,首先访问最左边的孩子,然后访问关键字,然后继续,因为B树中的孩子数量总是比关键字的数量大一个,因此访问密钥之前需要检查[代码为c#,但可以轻松转换为任何其他语言,目的只是显示算法]。
public void InOrderTraversal(BTreeNode<T1, T2> node, List<KeyValuePair<T1, T2>> sortedKeys)
{
if (node != null)
{
for (int i = 0; i < node.Children.Count; i++)
{
InOrderTraversal(node.Children[i], sortedKeys);
if (i < node.KeyValues.Count)
sortedKeys.Add(node.KeyValues[i]);
}
}
}