以下是一个可能的解决方案:

首先,我们需要定义一个组织节点类,其中包括节点类型、子节点列表和出现次数:

class OrgNode {
    private String type;
    private List<OrgNode> children;
    private int count;

    public OrgNode(String type) {
        this.type = type;
        this.children = new ArrayList<>();
        this.count = 0;
    }

    // getter and setter methods

    public void addChild(OrgNode child) {
        this.children.add(child);
    }

    public void incrementCount() {
        this.count++;
    }
}

接下来,我们需要遍历组织树并计算每个节点的出现次数。我们可以使用深度优先搜索算法来遍历树,并使用递归函数来实现:

public void calculateCounts(OrgNode node) {
    node.incrementCount(); // 计算当前节点的出现次数

    for (OrgNode child : node.getChildren()) {
        calculateCounts(child); // 递归计算子节点的出现次数
        node.setCount(node.getCount() + child.getCount()); // 累加子节点的出现次数到当前节点
    }
}

最后,我们可以创建一个示例组织树并调用上述函数来计算每个节点的出现次数:

public static void main(String[] args) {
    OrgNode root = new OrgNode("A");
    OrgNode nodeB = new OrgNode("B");
    OrgNode nodeC = new OrgNode("C");
    OrgNode nodeD = new OrgNode("D");
    OrgNode nodeE = new OrgNode("E");
    OrgNode nodeF = new OrgNode("F");

    root.addChild(nodeB);
    root.addChild(nodeC);
    nodeB.addChild(nodeD);
    nodeB.addChild(nodeE);
    nodeC.addChild(nodeF);

    calculateCounts(root);

    // 打印每个节点的类型和出现次数
    System.out.println(root.getType() + ": " + root.getCount());
    for (OrgNode child : root.getChildren()) {
        System.out.println("- " + child.getType() + ": " + child.getCount());
        for (OrgNode grandchild : child.getChildren()) {
            System.out.println("  - " + grandchild.getType() + ": " + grandchild.getCount());
        }
    }
}

输出结果应该类似于:

A: 6
- B: 3
  - D: 1
  - E: 1
- C: 2
  - F: 1
java 遍历组织树并根据某个类型计算每一个节点出现的次数并赋值给当前组织节点

原文地址: https://www.cveoy.top/t/topic/b1wT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录