二叉树中给定总和的路径 - 在递归中Java的

时间:2015-03-30 13:16:26

标签: java recursion binary-tree backtracking

我编写了一个代码,需要检查并在二叉树上打印,如果有一个从根向前的路径,如果我们在每个步骤中对对象求和,我们将获得给定的总和。

例如:

     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的值并停止自己 - 我的程序将按我喜欢的方式工作。但它只是继续下一个"如果"而且我不知道该怎么做......

帮助会很多。

1 个答案:

答案 0 :(得分:0)

代码忽略这些调用的返回值:

    sum(x, tree.getLeftSon(), num, s);
    sum(x, tree.getRightSon(), num, s);

这可能是导致错误结果的原因。

 s=s+tree.getNumber() + ", ";

将创建一个新变量并将其分配给" s"但不会改变原始变量" s"您传入的内容。在Java中,您无法传递引用,因此您必须使用返回值。