构建一个用二叉链表存储一个公司组织机构的相关数据的程序,假设该公司的下属分支都只有两个分 支,且公司的上下级关系为第一层级为总经理,第二层级为副总经理、第三层级为部门经理、第四层级为科室。其中设每个数据结点的数据项内容包括:部门的名称、负责人姓名。
时间: 2024-12-12 15:20:27 浏览: 11
构建这样一个公司组织结构的二叉链表程序,我们可以创建一个名为`OrganizationNode`的类,它包含以下属性:
1. `name`: 部门名称
2. `title`: 负责人姓名
3. `leftChild`: 左子节点,代表下级部门
4. `rightChild`: 右子节点,同样代表下级部门
5. `manager`: 父节点引用,用于表示上级关系
```python
class OrganizationNode:
def __init__(self, name, title):
self.name = name
self.title = title
self.leftChild = None
self.rightChild = None
self.manager = None
def set_manager(self, manager):
self.manager = manager
def add_child(self, child_node, is_left=True):
if is_left:
self.leftChild = child_node
else:
self.rightChild = child_node
```
为了模拟公司的层级结构,我们还需要一个函数来初始化这个树,例如,从总经理开始递归地添加下属:
```python
def build_organization_tree(general_manager, company_structure):
# 公司结构是一个字典,键是上级节点的姓名,值是下级节点列表
for manager_name, subordinates in company_structure.items():
manager = OrganizationNode(manager_name, "总经理")
general_manager.set_manager(manager)
for subordinate in subordinates:
new_node = OrganizationNode(subordinate[0], subordinate[1])
manager.add_child(new_node)
# 示例组织结构:
company_structure = {
"张三": [("李四", "副总经理"), ("王五", "部门经理")],
"李四": [("赵六", "科室")],
"王五": []
}
general_manager = OrganizationNode("张三", "总经理")
build_organization_tree(general_manager, company_structure)
```
在这个程序中,你可以通过`manager`属性访问任意节点的直接上级,而`add_child`方法则用于增加新的层级。
阅读全文