c语言设计二叉树结构,实现家族族谱树创建及相关查找
时间: 2024-12-13 20:19:53 浏览: 21
在C语言中,我们可以使用结构体和指针来设计二叉树的数据结构,包括创建和操作家族族谱树。首先,我们需要定义一个表示节点的结构体,包含父节点、左子节点和右子节点的指针,以及用于存储家庭成员信息的数据域(如姓名、关系等)。
```c
typedef struct Node {
char name[50];
int relation; // 关系,如父亲、儿子、兄弟等
struct Node* father;
struct Node* left;
struct Node* right;
} FamilyNode;
```
接下来,我们创建函数来实现家族族谱树的操作:
1. **创建节点** (`createNode`): 用于创建新节点并分配内存。
2. **插入节点** (`insertNode`): 根据关系将节点插入到适当的位置。
3. **搜索节点** (`searchNode`): 搜索指定名称或关系的节点。
4. **遍历** (`inOrderTraversal`, `preOrderTraversal`, `postOrderTraversal`): 实现前序、中序或后序遍历,展示家族结构。
以下是部分核心函数的示例代码:
```c
// 创建新节点
FamilyNode* createNode(char* name, int relation) {
FamilyNode* newNode = (FamilyNode*)malloc(sizeof(FamilyNode));
if (!newNode) return NULL;
newNode->name = name;
newNode->relation = relation;
newNode->father = NULL;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入节点
void insertNode(FamilyNode** root, char* name, int relation) {
if (*root == NULL) {
*root = createNode(name, relation);
return;
}
// ...根据关系递归插入...
}
// 搜索节点
FamilyNode* searchNode(FamilyNode* root, char* nameOrRelation) {
if (root == NULL || strcmp(root->name, nameOrRelation) == 0)
return root;
if (strcmp(root->name, nameOrRelation) < 0)
return searchNode(root->left, nameOrRelation);
else
return searchNode(root->right, nameOrRelation);
}
// 中序遍历示例
void inOrderTraversal(FamilyNode* node) {
if (node != NULL) {
inOrderTraversal(node->left);
printf("%s (%d)\n", node->name, node->relation);
inOrderTraversal(node->right);
}
}
```
阅读全文