分层树中的聚合
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
的实现称为 Leaf
和 Composite
。该组合引用了 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() 等等。遍历树并对值求和。
根据评论中的要求,构造函数添加了 - 尽管我怀疑我正在为你做作业!
需要使用 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
的实现称为 Leaf
和 Composite
。该组合引用了 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() 等等。遍历树并对值求和。
根据评论中的要求,构造函数添加了 - 尽管我怀疑我正在为你做作业!