构建一个用二叉链表存储一个公司组织机构的相关数据的程序,假设该公司的下属分支都只有两个分 支,且公司的上下级关系为第一层级为总经理◇第二层级为副总经理、第三层级为部门经理、第四层级为 科室,其中设每个数据结点的数据项内容包括:部门的名称、负责人姓名
时间: 2024-11-03 17:16:42 浏览: 37
为了构建一个使用二叉链表表示公司组织结构的程序,我们可以设计一个简单的树状结构,其中每个节点代表一个职位,包含部门名称和负责人姓名。由于每个下属分支只有两个子节点(假设为左孩子和右孩子),我们可以通过递归的方式来创建这种层次结构。这里是一个基础的 C++ 类定义:
```cpp
#include <iostream>
#include <string>
// 定义一个节点类,包含部门名称和负责人姓名
class Employee {
public:
std::string department;
std::string name;
// 构造函数
Employee(const std::string& d, const std::string& n) : department(d), name(n) {}
// 如果有左右子节点,则返回指向子节点的指针
virtual std::shared_ptr<Employee> getLeftChild() const = 0;
virtual std::shared_ptr<Employee> getRightChild() const = 0;
};
// 定义总经理节点
class ManagerNode : public Employee {
private:
std::shared_ptr<Employee> left_child, right_child; // 子节点
public:
ManagerNode(const std::string& d, const std::string& n)
: Employee(d, n), left_child(nullptr), right_child(nullptr) {}
// 实现 getLeftChild 和 getRightChild
std::shared_ptr<Employee> getLeftChild() const override { return left_child; }
std::shared_ptr<Employee> getRightChild() const override { return right_child; }
// 设置子节点
void setChildren(std::shared_ptr<Employee> left, std::shared_ptr<Employee> right) {
left_child = left;
right_child = right;
}
};
// 对于副总经理和更下层的职位,只需继承ManagerNode并重写getLeftChild和getRightChild
class ViceManager : public ManagerNode {
public:
// ...
};
class DepartmentManager : public ManagerNode {
public:
// ...
};
class SectionManager : public ManagerNode {
public:
// ...
};
int main() {
// 创建顶级节点,即总经理
std::shared_ptr<ManagerNode> generalManager = std::make_shared<ManagerNode>("总经理", "张三");
// 创建其他经理节点,并设置它们的父节点和子节点(这里省略具体操作)
std::shared_ptr<ViceManager> viceManager = ...;
std::shared_ptr<DepartmentManager> departmentManager = ...;
std::shared_ptr<SectionManager> sectionManager = ...;
// 设置总经理的下属节点
generalManager->setChildren(viceManager, departmentManager);
// 可能还会添加副总和其他经理到部门经理和科室经理的相应属性...
// 打印组织结构
std::cout << "组织结构:\n";
printOrganizationalStructure(generalManager); // 自定义的打印函数
return 0;
}
// 假设有一个辅助函数用于递归遍历和打印节点
void printOrganizationalStructure(std::shared_ptr<Employee> manager) {
std::cout << manager->department << " - " << manager->name << "\n";
if (manager->getLeftChild()) {
printOrganizationalStructure(manager->getLeftChild());
}
if (manager->getRightChild()) {
printOrganizationalStructure(manager->getRightChild());
}
}
```
阅读全文