首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >层次树中的聚合

层次树中的聚合
EN

Stack Overflow用户
提问于 2015-01-11 19:16:40
回答 1查看 1.4K关注 0票数 0

需要使用Java在层次树结构中进行聚合,请给出一些好的方法或API。

树结构:

A是一个根节点,它有两个节点B和C。B有两个子节点B1和B2,类似地C有两个子节点C1和C2。每个叶节点都有关联的值。

我需要聚合从叶开始的值到根节点的所有方式。

在上面的例子中,如果叶节点的值是B1=5、B2=5、C1=3和C2=7,那么聚合将给出10到B节点和10到C节点的值。根节点A的值为20。

请提出解决办法。

我必须从文件中加载树结构。我的档案如下。

节点\Id\ParentId

A\x{e76f}1.1

B.2-1

C\x{e76f}3\x{e76f}

B1-4-2

B2/5/2

C1/6-3

C2-7-2-3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-11 20:02:01

我建议调查一下复合图案。本质上,这涉及到有一个接口Node与方法getValue,然后实现Node称为LeafComposite。该组合具有对Node的引用。

getValue的不同实现要么返回叶值,要么汇总子值。

例如:

代码语言:javascript
复制
interface Node {
    public int getValue();
}

class Leaf implements Node {
    private final int value;
    public Leaf(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
}

class Composite implements Node {
    private final Node left;
    private final Node right;
    public Composite(Node left, Node right) {
        this.left = left;
        this.right = right;
    }
    public int getValue() {
        return left.getValue() + right.getValue();
    }
}

下面是使用此层次结构的示例代码:

代码语言:javascript
复制
Leaf b1 = new Leaf(5);
Leaf b2 = new Leaf(5);
Node b = new Node(b1, b2);
Leaf c1 = new Leaf(3);
Leaf c2 = new Leaf(7);
Node c = new Node(c1, c2);
Node a = new Node(b, c);
System.out.println("a value = " + a.getValue());

当调用a.getValue()时,它调用b.getValue(),后者调用b1.getValue()等。遍历树并对值进行求和。

正如评论中所要求的那样,建设者补充说--尽管我怀疑我在为你做你的任务!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27891038

复制
相关文章

相似问题

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