求和二叉树产生意想不到的结果

时间:2018-01-13 03:20:54

标签: java binary-search-tree

尝试对BST为整数的所有节点求和

该方法传递0,但是当它从左子树转换到右子树时,总和似乎减少了。任何帮助将不胜感激

该方法通过根并且计数器初始化为0

public static int sumTree(TreeNode root,int sum) {
if (root != null) {
  System.out.println("current value: " + root.getValue());
  sum += (Integer) root.getValue();
  System.out.println(sum);
  sumTree(root.getLeft(),sum);
  sumTree(root.getRight(),sum);
}

return sum;
}

1 个答案:

答案 0 :(得分:0)

sumTree(root.getLeft(),sum);
sumTree(root.getRight(),sum);

只是孤立地看着这些电话,他们什么都不做。它们的返回值正在丢失,对sum的递归副本的修改不会影响调用者sum;他们是不同的变量。

public static int sumTree(TreeNode root) {
    if (root == null) {
        return 0;
    }

    System.out.println("current value: " + root.getValue());
    int sum = (Integer) root.getValue();
    System.out.println(sum);
    sum += sumTree(root.getLeft());
    sum += sumTree(root.getRight());

    return sum;
}

修复方法是将两个递归调用的返回值添加到sum。不需要sum作为参数:子树的总和独立于其上方树的其余部分。