基本Java示例:给定二叉树和整数,它是目标级别的深度。 并计算目标级别中节点的总和。
我将函数中的值添加到左右节点。为什么这个解决方案在这种情况下不起作用,任何人都可以帮忙解释一下吗?
此外,当返回travese
函数时,它是否返回到父根或更像{for循环中的break;
并且流程已停止?
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);
}
}
答案 0 :(得分:0)
首先,你没有返回求和的结果。你将不得不归还它。
然后,既然你写了“在目标级别”,我想你只需要在目标级别总结节点,而不是在级别之前的节点。
试试这个:
public int levelSum(TreeNode root, int level) {
return traverse(root, 1, level);
}
public void traverse(TreeNode root, int depth, int level){
int sum = 0;
if(root == null || depth > level){
return 0;
}
if (depth == level) sum += root.val;
if(root.left != null) {
sum += traverse(root.left, depth + 1, level);
}
if(root.right != null) {
sum += traverse(root.right, depth + 1, level);
}
return sum;
}