我编写了一个代码,需要检查并在二叉树上打印,如果有一个从根向前的路径,如果我们在每个步骤中对对象求和,我们将获得给定的总和。
例如:
1
/ \
4 1
/ \ / \
8 2 6 8
/ \ / \
10 5 2 8
让我们说我们得到5号。 程序需要以字符串" 1,4" - 因为它给了总和5。
如果给出数字8,程序将返回字符串" 1,1,6和#34; - 因为它给了总和8。
这是我写的程序:
public String sum(int x) {
return sum(x, root, 0, "");
}
private String sum(int x, Node tree, int num, String s) {
if(tree == null)
return "";
if(num == x) {
s=s+tree.getNumber() + ", ";
return s;
}
if (num != x)
s=s+tree.getNumber() + ", ";
sum(x, tree.getLeftSon(), num, s);
sum(x, tree.getRightSon(), num, s);
return s;
当我运行代码时,它看起来一切都很好 - 但是当它进入&#34时的条件结束时; if(num == x)" - 它只是没有返回值!
我运行调试器,并得到了我想要的正确值。如果程序将返回s的值并停止自己 - 我的程序将按我喜欢的方式工作。但它只是继续下一个"如果"而且我不知道该怎么做......
帮助会很多。
答案 0 :(得分:0)
代码忽略这些调用的返回值:
sum(x, tree.getLeftSon(), num, s);
sum(x, tree.getRightSon(), num, s);
这可能是导致错误结果的原因。
行
s=s+tree.getNumber() + ", ";
将创建一个新变量并将其分配给" s"但不会改变原始变量" s"您传入的内容。在Java中,您无法传递引用,因此您必须使用返回值。