在C#中在BST上打印有序遍历

时间:2018-01-25 01:59:17

标签: c#

我是学生,不能接受代码答案,但如果有人能指出我对顺序树遍历的概念错误,我将非常感激。我一直在上网/书籍/ MSDN,我似乎无法弄清楚我哪里出错了。

我的代码只会打印BST的根目录。谢谢您的帮助。

树类snipet:

  =Code.Promedio(LookupSet(Fields!Dim_ConceptosInventario_.Value, Fields!Dim_ConceptosInventario_.Value, Fields!InventarioDirecto_Monto.Value, "DS_SubInventarioDirecto"),LookupSet(Fields!Dim_ConceptosInventario_.Value, Fields!Dim_ConceptosInventario_.Value, Fields!nPeriodo.Value, "DS_SubInventarioDirecto"),CINT(replace(left(Split(Parameters!DimTiempoMes.Value,"[").GetValue(3),2),"]","")) )

主要snipet:

        public String PrintInOrder()
    {
        String S = "";
        return PrintInOrderHelper(ref root, S);
    }

    public String PrintInOrderHelper(ref Node N, String S)
    {
        if (N != null)
        {
            PrintInOrderHelper(ref N.left, S);
            S = S + N.V.ToString().PadLeft(2);
            PrintInOrderHelper(ref N.right, S);
        }
        return S;
    }

我知道BST正在正常运行,因为Count()是正确的。这是我无法接受的印刷。

修改

感谢所有帮助过的人。这是我第一次发帖,我真的很感激。我找到了解决将来看这篇文章的人的解决方案:

树类:

Tree t = new Tree(nums[0]);
            for (int i = 1; i < nums.Length; i++)
            {
                t.Add(nums[i]);
            }
            Console.WriteLine("Tree contents: " + t.PrintInOrder());
            Console.WriteLine("Tree statistics:");
            Console.WriteLine("  Number of nodes: " + t.Count());

主:

public void PrintInOrder()
    {
       PrintInOrderHelper(ref root);
    }

    public void PrintInOrderHelper(ref Node N)
    {
       if (N == null)
        {
            return;
        }
        PrintInOrderHelper(ref N.left);
        Console.Write(N.V.ToString().PadLeft(2));
        PrintInOrderHelper(ref N.right);
    }

我删除了所有String传递,因为它没有必要,并使方法无效。

1 个答案:

答案 0 :(得分:0)

看起来你可能误解了传递值与传递引用或者忘记使用返回值。但仅供参考(没有双关语)...

void main() {
   String s = ""
   foo(s);
   Console.WriteLine(s); // s still equals "" here because s is passed to foo by value
}

void foo(String s) {
   bar(s);
   s = s + "foo";
   // s == "foo"
}

void bar(String s) {
   s = "bar";
}

我需要做的是返回字符串然后将它们连接起来。

void main() {
   String s = foo();
   Console.WriteLine(s);
   // s == "barfoo"
}

String foo() {
   return bar() + "foo"
}

String bar() {
   return "bar";
}

请注意,在第二个示例中,根本不需要将字符串作为参数传递。