c语言编程完成通过为叉树的顺序存储输入,创建二叉链树
时间: 2023-06-12 18:04:25 浏览: 40
首先,我们需要定义一个二叉树的结构体:
```
struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
};
```
然后,我们可以使用顺序存储的方式输入二叉树的节点数据,以数组的形式存储。具体代码如下:
```
int data[MAX_SIZE]; // 定义一个数组来存储二叉树节点数据
int index = 0; // 定义一个全局变量,用来记录当前输入的节点在数组中的下标
// 顺序存储输入二叉树的数据
void input() {
int num;
printf("请输入节点个数:");
scanf("%d", &num);
printf("请输入节点数据:");
for (int i = 0; i < num; i++) {
scanf("%d", &data[i]);
}
}
// 递归创建二叉树
struct TreeNode *createTree() {
struct TreeNode *node;
int temp = data[index++]; // 取出当前节点的数据
if (temp == -1) { // 如果数据为-1,表示该节点为空
node = NULL;
} else {
node = (struct TreeNode *)malloc(sizeof(struct TreeNode)); // 创建新节点
node->data = temp;
node->left = createTree(); // 递归创建左子树
node->right = createTree(); // 递归创建右子树
}
return node;
}
```
在这里,我们假设输入的二叉树的空节点数据为-1。我们首先通过input()函数顺序输入二叉树的节点数据,并存储在data数组中。然后,我们通过createTree()函数递归创建二叉树,具体实现如下:
1. 首先,我们从data数组中取出当前节点的数据temp;
2. 如果temp等于-1,表示该节点为空,直接返回NULL;
3. 否则,我们创建一个新节点node,将temp赋值给node的data成员;
4. 然后,我们递归调用createTree()函数来创建node的左子树和右子树,并将返回的节点地址分别赋值给node的left和right成员;
5. 最后,返回node节点的地址。
完整代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
};
int data[MAX_SIZE]; // 定义一个数组来存储二叉树节点数据
int index = 0; // 定义一个全局变量,用来记录当前输入的节点在数组中的下标
// 顺序存储输入二叉树的数据
void input() {
int num;
printf("请输入节点个数:");
scanf("%d", &num);
printf("请输入节点数据:");
for (int i = 0; i < num; i++) {
scanf("%d", &data[i]);
}
}
// 递归创建二叉树
struct TreeNode *createTree() {
struct TreeNode *node;
int temp = data[index++]; // 取出当前节点的数据
if (temp == -1) { // 如果数据为-1,表示该节点为空
node = NULL;
} else {
node = (struct TreeNode *)malloc(sizeof(struct TreeNode)); // 创建新节点
node->data = temp;
node->left = createTree(); // 递归创建左子树
node->right = createTree(); // 递归创建右子树
}
return node;
}
int main() {
struct TreeNode *root;
input(); // 输入二叉树节点数据
root = createTree(); // 创建二叉树
return 0;
}
```