{ "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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录