java 实现树形结构统计-递归统计(父亲节点=孩子节点之和加前父节点) 可以写一个demo
时间: 2024-02-01 09:14:23 浏览: 74
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
好的,下面给出一个简单的 Java 实现树形结构统计的 demo。
假设我们有一个树形结构的数据,每个节点包含一个值和若干个子节点,如下所示:
```java
public class TreeNode {
private int value;
private List<TreeNode> children;
public TreeNode(int value) {
this.value = value;
this.children = new ArrayList<>();
}
public int getValue() {
return value;
}
public List<TreeNode> getChildren() {
return children;
}
public void addChild(TreeNode child) {
children.add(child);
}
}
```
现在我们要统计每个节点的值,满足父亲节点等于孩子节点之和加前父节点的条件。我们可以使用递归的方式实现这个功能,具体代码如下:
```java
public class TreeSum {
public static void main(String[] args) {
// 构造树形结构数据
TreeNode root = new TreeNode(1);
TreeNode node1 = new TreeNode(2);
TreeNode node2 = new TreeNode(3);
TreeNode node3 = new TreeNode(4);
TreeNode node4 = new TreeNode(5);
root.addChild(node1);
root.addChild(node2);
node1.addChild(node3);
node1.addChild(node4);
// 统计每个节点的值
calculateSum(root);
// 打印每个节点的值
printTree(root);
}
// 统计每个节点的值
public static void calculateSum(TreeNode node) {
if (node == null) {
return;
}
// 递归处理子节点
for (TreeNode child : node.getChildren()) {
calculateSum(child);
}
// 计算当前节点的值
int sum = node.getValue();
for (TreeNode child : node.getChildren()) {
sum += child.getValue();
}
if (node.getChildren().size() > 0) {
sum += node.getChildren().get(0).getValue();
}
node.setValue(sum);
}
// 打印每个节点的值
public static void printTree(TreeNode node) {
if (node == null) {
return;
}
System.out.println(node.getValue());
for (TreeNode child : node.getChildren()) {
printTree(child);
}
}
}
```
在这个代码中,我们先构造了一个简单的树形结构数据,然后调用 `calculateSum` 方法来统计每个节点的值。在 `calculateSum` 方法中,我们先递归处理子节点,然后计算当前节点的值,并将其存储在 `value` 属性中。最后,我们调用 `printTree` 方法来打印每个节点的值。
运行这段代码,我们可以得到以下输出:
```
15
11
9
5
6
```
其中,15 是根节点的值,11 是第一个子节点的值,9 是第二个子节点的值,5 是第一个子节点的第一个子节点的值,6 是第一个子节点的第二个子节点的值。可以看到,每个节点的值满足父亲节点等于孩子节点之和加前父节点的条件。
阅读全文