代码之家  ›  专栏  ›  技术社区  ›  Batman

二进制树中给定和的路径-递归|Java

  •  0
  • Batman  · 技术社区  · 9 年前

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

    例如:

         1
        /  \
      4     1
     / \   / \
    8   2 6   8
       / \   / \
     10   5 2   8
    

    假设我们得到了数字5。 程序需要以字符串“1,4”返回,因为它给出了和5。

    如果给我们数字8,程序将返回字符串“1,1,6”,因为加起来它给出了和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;
    

    当我运行代码时,它看起来很好-但当它进入“if(num==x)”条件的末尾时-它就是不返回值!

    我运行了调试器,得到了所需的所有正确值。如果程序返回s的值并自行停止,我的程序将按照我的意愿工作。但它只是继续到下一个“如果”,我不知道该怎么办。。。

    帮助会得到很多通知。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Richard    9 年前

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

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

    这可能就是你得到错误结果的原因。
    线路

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

    将创建一个新变量并将其分配给“s”,但不会更改传入的原始变量“s”。在Java中,不能传递引用,因此必须使用返回值。