我是学生,不能接受代码答案,但如果有人能指出我对顺序树遍历的概念错误,我将非常感激。我一直在上网/书籍/ 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传递,因为它没有必要,并使方法无效。
答案 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";
}
请注意,在第二个示例中,根本不需要将字符串作为参数传递。