需要使用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
发布于 2015-01-11 20:02:01
我建议调查一下复合图案。本质上,这涉及到有一个接口Node与方法getValue,然后实现Node称为Leaf和Composite。该组合具有对Node的引用。
getValue的不同实现要么返回叶值,要么汇总子值。
例如:
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()等。遍历树并对值进行求和。
正如评论中所要求的那样,建设者补充说--尽管我怀疑我在为你做你的任务!
https://stackoverflow.com/questions/27891038
复制相似问题