使用c语言构建一个用二叉树表存储一个公司组织结构的相关数据的程序,假设该公司的下属分支都只有两个分支,且公司的上下级关心为第一层级为总经理,第二层级为副总经理,第三层级为部分经理,第四层级为科室。其中设每个数据结点的数据内容包括:部分的名称,负责人姓名
时间: 2024-11-07 19:19:38 浏览: 21
附录1-基础实验.zip
为了构建这样一个二叉树结构的C语言程序,我们可以定义一个结构体来代表组织结构中的每个节点,并设置递归算法来添加、查找和遍历节点。以下是核心的代码框架:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char part_name[50];
char manager_name[50];
struct TreeNode* left; // 子部门
struct TreeNode* right; // 下属科室
} Employee;
typedef struct TreeNode {
Employee data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 插入节点函数
void insert(Node** node, const char* part_name, const char* manager_name) {
Employee e = {0};
strcpy(e.part_name, part_name);
strcpy(e.manager_name, manager_name);
if (*node == NULL) {
*node = (Node*)malloc(sizeof(Node));
(*node)->data = e;
(*node)->left = (*node)->right = NULL;
} else if (strcmp(part_name, (*node)->data.part_name) > 0) {
insert(&(*node)->right, part_name, manager_name);
} else {
insert(&(*node)->left, part_name, manager_name);
}
}
// 遍历打印组织结构
void printTree(Node* root) {
if (root != NULL) {
printf("Part: %s, Manager: %s\n", root->data.part_name, root->data.manager_name);
printTree(root->left);
printTree(root->right);
}
}
int main() {
Node* root = NULL;
// 示例:插入总经理,两个下属
insert(&root, "总经理部", "张总");
insert(&root->left, "副总经理部", "李副总");
insert(&root->right, "科室A", "王科长");
// 打印整个组织结构
printTree(root);
return 0;
}
```
在这个例子中,我们创建了一个`Node`结构体,它内部嵌套了`Employee`结构体,包含了部分名称和负责人姓名。`insert`函数根据部分名称的字典序递归地插入节点。`printTree`函数则按照层次遍历并打印组织结构。
阅读全文