遍历组织树并且根据传入的类型统计每个节点时该节点及子节点包括这个类型的数量
以下是 Python 代码示例:
def count_nodes(node, node_type, count_dict):
"""
遍历组织树并统计节点数量
:param node: 当前节点
:param node_type: 要统计的节点类型
:param count_dict: 统计结果字典
"""
if node.type == node_type:
count_dict[node.name] = count_dict.get(node.name, 0) + 1
for child in node.children:
count_nodes(child, node_type, count_dict)
if node.type == node_type:
count_dict[node.name] = count_dict.get(node.name, 0) + count_dict[child.name]
# 示例用法
# 假设有一个组织树,根节点为 company,下面有三个部门节点 department1、department2、department3,
# department1 下面有两个员工节点 employee1、employee2,department2 下面有一个员工节点 employee3,
# department3 下面没有节点
# 统计每个部门及其子部门下的员工节点数量
company = Node("company", "company")
department1 = Node("department1", "department")
department2 = Node("department2", "department")
department3 = Node("department3", "department")
employee1 = Node("employee1", "employee")
employee2 = Node("employee2", "employee")
employee3 = Node("employee3", "employee")
department1.add_child(employee1)
department1.add_child(employee2)
department2.add_child(employee3)
company.add_child(department1)
company.add_child(department2)
company.add_child(department3)
count_dict = {}
count_nodes(company, "employee", count_dict)
print(count_dict) # 输出:{'department1': 2, 'employee1': 1, 'employee2': 1, 'department2': 1, 'employee3': 1}
在上述示例中,我们定义了一个 count_nodes 函数,它接收三个参数:当前节点、要统计的节点类型和统计结果字典。在函数中,我们先判断当前节点的类型是否是要统计的节点类型,如果是,则在统计结果字典中增加当前节点的数量。然后遍历当前节点的每个子节点,递归调用 count_nodes 函数,并在统计结果字典中增加当前节点及其子节点包括要统计的节点类型的数量。最后,我们可以调用 count_nodes 函数来统计组织树中每个部门及其子部门下的员工节点数量,并将结果存储在一个字典中。
原文地址: https://www.cveoy.top/t/topic/b1Le 著作权归作者所有。请勿转载和采集!