如何使用B-Tree进行InOrder遍历?

时间:2017-03-30 21:25:25

标签: c++ b-tree

{{1}}

我的方法不知何故是段错误。我们如何为B-tree编写正确的inOrder Traversal?

2 个答案:

答案 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]);
                }
            }
        }