【发布时间】:2016-05-12 00:37:05
【问题描述】:
一个基本的 Java 示例:给定一个二叉树和一个整数,它是目标级别的深度。 并计算目标层级节点的总和。
我将函数中的值添加到左右节点。为什么这个解决方案在这种情况下不起作用,谁能帮忙解释一下?
另外,当travese 函数返回时,它是返回到父根还是更像break; for 循环并且流停止了?
private int sum;
public int levelSum(TreeNode root, int level) {
sum = 0;
traverse(root, 1, level, 0);
return sum;
}
public void traverse(TreeNode root, int depth, int level, int sum) {
if(root == null) {
return;
}
if(depth == level) {
return;
}
if(root.left != null) {
traverse(root.left, depth + 1, level, sum + root.left.val);
}
if(root.right != null) {
traverse(root.right, depth + 1, level, sum + root.right.val);
}
}
【问题讨论】:
-
除了初始化之外,您永远不会在
levelSum例程中分配给sum。而traverse返回void,因此您无法将中间sum值传递回调用堆栈。您可能应该将这两个例程合并为一个返回int的函数。 -
我在您发布的代码中没有看到
for循环,所以我无法回答您的最后一个问题。
标签: java binary-tree