尝试对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;
}
答案 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
作为参数:子树的总和独立于其上方树的其余部分。