B +树节点总和

时间:2017-11-01 05:00:50

标签: java recursion b-tree

我试图在某个深度上对B +树节点的所有元素求和。

以下是代码:

public static int printSumAtD(BTreeNode T, int d) {

    if(d == 0) {
        int sum;

        for (int i = 0; i < T.key.length; i++) {
             sum =  sum + T.key[i];
        }
        return sum;

    } else {
        if(T.isLeaf)
            return 0;
        else{
            for(int i = 0; i < T.n+1; i++) {
                printSumAtD(T.c[i], d-1);
            }
        }
    }

    return 0;

}

问题是“sum”将是每个元素的总和,但最后它会变为0.

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为您提出的一些建议:

  1. 在递归调用中,您需要考虑如何获取结果并减少它们。在您的情况下,您忽略了递归调用的返回值。

  2. 此方法应该在BTreeNode类中,以便您可以避免访问实例变量keyc(应该是私有且具有更好的名称)。< / p>

  3. 习惯于使用Stream和集合来进行此类迭代操作,而不是传统的迭代。

  4. 把所有这些放在一起:

    class BTreeNode {
        private int value;
        private List<BTreeNode> children;
    
        public int sumAtDepth(int depth) {
            if (depth == 0)
                return value;
            else if (depth > 0)
                return children.stream()
                    .mapToInt(c -> c.sumAtDepth(depth - 1)).sum();
            else
                throw new IllegalArgumentException("Negative depth");
        }
    }