首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >B+Tree节点和

B+Tree节点和
EN

Stack Overflow用户
提问于 2017-11-01 05:00:49
回答 1查看 236关注 0票数 0

我试图在一定深度上对B+树节点的所有元素进行汇总。

以下是代码:

代码语言:javascript
复制
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。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 05:49:29

以下是给你的一些建议:

  1. 在递归调用中,您需要考虑如何获取和减少结果。在您的示例中,您忽略了递归调用的返回值。
  2. 这个方法应该在BTreeNode类中,这样就可以避免访问实例变量keyc (它们应该是私有的,并且有更好的名称)。
  3. 习惯于在这种迭代操作中使用Stream和集合,而不是传统的迭代。

把所有这些放在一起:

代码语言:javascript
复制
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");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47048519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档