我试图以递归方式遍历树并返回给定深度的总和。假设我想要深度= 2的和,它应该递归并减去1直到深度为0,然后将该节点添加到总和。它总是对整棵树进行求和,而不仅仅是一个层次,我不确定错误在哪里。另外,我应该使用ReduceFunction接口。
public interface ReduceFunction<InT,OutT> {
public OutT combine(OutT soFar, InT x);
public OutT initialValue();
}
public T reduce(int n, ReduceFunction<T,T> f) {
return rdceHelper(n, root, f, f.initialValue());
}
private T rdceHelper(int depth, TreeNode<T> node, ReduceFunction<T,T> f, T sum){
if(node == null || depth < 0){
return f.initialValue();
}
if(depth == 0){
sum = f.combine(sum, node.data);
}
if(node.left != null){
sum = f.combine(sum, rdceHelper(depth-1, node.left, f, sum));
}
if(node.right != null){
sum = f.combine(sum, rdceHelper(depth-1, node.right, f, sum));
}
return sum;
}
答案 0 :(得分:0)
确定。我没有源代码,因此无法验证以下解决方案。我认为我们不需要和变量。如果我们使用递归,我们可以处理。如果您仍想使用,则传递值&#39; 0&#39;。
您可以将代码修改为以下并检查,
if(depth == 0){
return f.combine(0, node.data);
}else{
return f.combine(0, rdceHelper(depth-1, node.left, f, 0)) +
f.combine(0, rdceHelper(depth-1, node.right, f, 0));
}