分层树中的聚合

Aggregation in hierarchical tree

需要使用 Java 在分层树结构中进行聚合,请推荐一些好的方法或 API 来执行此操作。

树结构:

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

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

在上面的例子中,如果叶节点的值为B1=5,B2=5,C1=3,C2=7。然后 Aggregation 会给 B 节点赋值 10,给 C 节点赋值 10。根节点 A 的值为 20.

请提出解决方案。

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

节点|Id|ParentId
A|1|1
B|2|1
C|3|1
B1|4|2
B2|5|2
C1|6|3
C2|7|3

我建议调查 Composite Pattern。从本质上讲,这涉及到具有方法 getValue 的接口 Node,然后 Node 的实现称为 LeafComposite。该组合引用了 Node

getValue 的不同实现要么 return 叶子值,要么对 children 的值求和。

例如:

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();
    }
}

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

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() 等等。遍历树并对值求和。

根据评论中的要求,构造函数添加了 - 尽管我怀疑我正在为你做作业!