用C语言编写一个程序,我输入一个人的名字,查找他在族谱的亲属关系,要求必须使用到二叉树
时间: 2024-12-22 10:18:05 浏览: 9
在C语言中,我们可以利用二叉树的数据结构来模拟族谱的关系。这里我们创建一个简单的二叉树节点结构,并使用递归的方式来查询亲属关系。首先,我们需要定义一个`Person`结构体,包含姓名和指向子节点的指针。
```c
#include <stdio.h>
typedef struct Person {
char name[50];
struct Person* left;
struct Person* right;
} Person;
// 插入节点到二叉树
void insert(Person** root, char* name) {
if (*root == NULL) {
*root = (Person*)malloc(sizeof(Person));
strcpy((*root)->name, name);
(*root)->left = NULL;
(*root)->right = NULL;
} else if(strcmp(name, (*root)->name) < 0) {
insert(&(*root)->left, name);
} else {
insert(&(*root)->right, name);
}
}
// 查找亲属关系(示例函数,仅提供基本框架)
void findRelative(Person* root, char* target, char relation[]) {
if (root == NULL || strcmp(root->name, target) == 0) {
printf("%s 是你的%s\n", root->name, relation);
return;
}
// 添加递归遍历左右子树的逻辑
if (strcmp(target, root->left->name) <= 0) {
findRelative(root->left, target, relation);
}
if (strcmp(target, root->right->name) > 0) {
findRelative(root->right, target, relation);
}
}
int main() {
Person* root = NULL;
// 输入族谱成员并插入树中
while (1) {
char name[50];
printf("请输入一个人的名字(输入'q'结束):");
scanf("%s", name);
if (strcmp(name, "q") == 0) break;
insert(&root, name);
}
// 测试查找亲属关系
char query_name[50];
printf("请输入你要查询的人的名字:");
scanf("%s", query_name);
findRelative(root, query_name, "父亲"); // 或者"母亲",替换为你需要的关系
return 0;
}
```
阅读全文