能否提供用C语言实现的树的三种存储结构(双亲表示法、孩子表示法和孩子兄弟表示法)的完整示例代码?
时间: 2024-11-24 15:10:31 浏览: 59
在C语言中,树的三种常见存储结构包括:
1. 双亲表示法(也叫链接表示法):
```c
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建节点函数
TreeNode* createNode(int value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode != NULL) {
newNode->data = value;
newNode->left = newNode->right = NULL;
}
return newNode;
}
// 插入节点示例
void insert(TreeNode** root, int value) {
if (*root == NULL) {
*root = createNode(value);
} else if (value < (*root)->data) {
insert(&(*root)->left, value);
} else {
insert(&(*root)->right, value);
}
}
```
2. 孩子表示法(也叫顺序存储表示法):
在这个结构中,树的节点通常按照层次顺序连续存储,但每个节点仅存储其直接的孩子节点指针。
```c
typedef struct {
int data;
struct Node* child[2]; // 二叉树最多两个孩子
} Node;
// ...其他插入和遍历操作类似,只是查找孩子需要索引
```
3. 孩子兄弟表示法(也叫邻接表表示法):
```c
typedef struct TreeNode {
int data;
struct TreeNode* next; // 每个节点只保存指向下一个兄弟节点的指针
} TreeNode;
// 创建节点函数
TreeNode* createNode(int value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 查找兄弟节点并插入示例
void insert(Node** head, int value) {
// 找到合适的位置插入新节点
// ... (这里需要根据实际的搜索算法实现)
}
```
阅读全文