特定深度的二叉树之和

时间:2018-04-10 04:04:51

标签: java recursion

我试图以递归方式遍历树并返回给定深度的总和。假设我想要深度= 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;
}

1 个答案:

答案 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));
    }