C语言实现员工树结构:查找下属员工数量
{ "title": "C语言实现员工树结构:查找下属员工数量", "description": "本代码使用C语言实现了一个员工树结构,并提供了查找指定员工下属员工数量的功能。代码中使用了递归算法来遍历树结构,并统计每个节点的子节点数量。", "keywords": "C语言, 树结构, 员工树, 递归算法, 查找下属员工数量", "content": "#include <stdio.h> #include <stdlib.h>
typedef struct TreeNode {
int employeeId;
struct TreeNode *parent;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* createTreeNode(int employeeId, TreeNode *parent, TreeNode *left, TreeNode *right) { TreeNode node = (TreeNode) malloc(sizeof(TreeNode)); node->employeeId = employeeId; node->parent = parent; node->left = left; node->right = right; return node; }
TreeNode* findEmployee(TreeNode *root, int employeeId) { if (root == NULL) return NULL;
if (root->employeeId == employeeId)
return root;
TreeNode *leftResult = findEmployee(root->left, employeeId);
if (leftResult != NULL)
return leftResult;
TreeNode *rightResult = findEmployee(root->right, employeeId);
if (rightResult != NULL)
return rightResult;
return NULL;
}
int countSubordinates(TreeNode *node) { if (node == NULL) return 0;
int count = 1;
count += countSubordinates(node->left);
count += countSubordinates(node->right);
return count;
}
int findSubordinatesCount(TreeNode *root, int employeeId) { TreeNode *employeeNode = findEmployee(root, employeeId); if (employeeNode == NULL) { printf("员工编号 %d 不存在。\n", employeeId); return 0; }
int count = countSubordinates(employeeNode) -1;
printf("员工编号 %d 的下属员工数量为:%d\n", employeeId, count);
return count;
}
int main() {
TreeNode *root = createTreeNode(1, NULL, NULL, NULL);
int n;
printf("请输入节点数量:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int employeeId, parentId;
printf("请输入第 %d 个节点的员工编号和上级员工编号(空格分隔):", i + 1);
scanf("%d %d", &employeeId, &parentId);
TreeNode *parentNode = findEmployee(root, parentId);
TreeNode *node = createTreeNode(employeeId, parentNode, NULL, NULL);
if (parentNode != NULL) {
if (parentNode->left == NULL)
parentNode->left = node;
else
parentNode->right = node;
}
}
int employeeId;
printf("请输入要查找下属员工数量的员工编号:");
scanf("%d", &employeeId);
findSubordinatesCount(root, employeeId);
free(root);
return 0;
}
// 打开文件 FILE *file = fopen("data.txt", "w"); if (file == NULL) { printf("无法打开文件。\n"); return 0; }
// 将数据写入文件 fprintf(file, "节点数量:%d\n", n); fprintf(file, "员工编号\t上级员工编号\n"); for (int i = 0; i < n; i++) { int employeeId, parentId; printf("请输入第 %d 个节点的员工编号和上级员工编号(空格分隔):", i + 1); scanf("%d %d", &employeeId, &parentId);
fprintf(file, "%d\t%d\n", employeeId, parentId);
}
// 关闭文件 fclose(file);
原文地址: https://www.cveoy.top/t/topic/pObT 著作权归作者所有。请勿转载和采集!