我是一名学生,不能接受代码答案,但如果有人能指出我在顺序树遍历中存在的概念错误,我将不胜感激。我一直在互联网/书籍/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";
}
请注意,在第二个示例中,根本不需要将字符串作为参数传递。