在 C# 中的 BST 上打印按顺序遍历



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

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

树类狙击:

        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;
    }

主要狙击手:

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());

我知道BST是正确的,因为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);
    }

主要:

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

我摆脱了所有字符串传递,因为它不是必需的,并使方法无效。

似乎您可能对按值传递与按引用传递有误解,或者只是忘记使用返回值。 但仅供参考(没有双关语(...

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";
}

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

最新更新