层序次序创建二叉树,用C语言实现
时间: 2023-09-12 14:04:51 浏览: 196
### 回答1:
层序创建二叉树是指按照二叉树的层序遍历的顺序,从上到下、从左到右依次创建二叉树的节点。
在 C 语言中,可以使用队列来实现层序创建二叉树。首先,创建一个队列,将二叉树的根节点入队。然后,每次从队列中取出一个节点,将它的左右子节点依次入队。重复这个过程,直到队列为空。
以下是 C 语言代码示例,它创建一个由数组中的数据构成的二叉树:
```
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树的结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*) malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 层序创建二叉树
TreeNode* createBinaryTree(int* data, int size) {
if (size <= 0) return NULL;
// 创建根节点
TreeNode* root = createNode(data[0]);
// 创建队列,并将根节点入队
TreeNode** queue = (TreeNode**) malloc(sizeof(TreeNode*) * size);
queue[0] = root;
int head = 0;
int tail = 1;
// 循环创建二叉树的节点
for (int i = 1; i < size; i++) {
// 取出队列的头节点
TreeNode* node = queue[head];
head++;
// 创建左
### 回答2:
首先,层序次序创建二叉树是指按照从上到下、从左到右的顺序逐层创建二叉树的节点。下面是一个用C语言实现层序次序创建二叉树的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树的节点结构
struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
};
// 创建新的二叉树节点
struct TreeNode* createNode(int data) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
if(newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 层序次序创建二叉树
struct TreeNode* createBinaryTree(int levelOrder[], int size) {
struct TreeNode* root = NULL;
struct TreeNode* queue[size];
int front = 0, rear = -1;
int i = 0;
// 创建根节点
root = createNode(levelOrder[i++]);
// 入队
queue[++rear] = root;
while(front <= rear) {
struct TreeNode* current = queue[front++];
if(i < size) {
// 创建当前节点的左子节点
current->left = createNode(levelOrder[i++]);
queue[++rear] = current->left;
}
if(i < size) {
// 创建当前节点的右子节点
current->right = createNode(levelOrder[i++]);
queue[++rear] = current->right;
}
}
return root;
}
// 测试代码
int main() {
int levelOrder[] = {1, 2, 3, 4, 5, 6, 7};
int size = sizeof(levelOrder)/sizeof(levelOrder[0]);
struct TreeNode* root = createBinaryTree(levelOrder, size);
printf("层序次序创建二叉树成功!\n");
return 0;
}
```
以上代码中,使用一个数组作为队列来辅助创建二叉树。首先创建根节点,然后将根节点入队。接着,取出队首节点,依次创建其左子节点和右子节点,并将它们入队。重复这个过程,直到遍历完整个数组为止。最后返回根节点,即可得到以层序次序创建的二叉树。
以上就是使用C语言实现层序次序创建二叉树的方法。希望对你有帮助!
### 回答3:
实现层序次序创建二叉树,可以使用C语言的队列来辅助实现。具体步骤如下:
1. 首先定义二叉树的结点结构体,包括存储数据的变量和指向左右子树的指针。
```c
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
2. 创建一个队列结构体,用于辅助层序遍历创建二叉树。
```c
typedef struct QueueNode {
TreeNode* data;
struct QueueNode* next;
} QueueNode;
typedef struct Queue {
QueueNode* front;
QueueNode* rear;
} Queue;
```
3. 定义队列的一些操作函数,如初始化队列、判断队列是否为空、入队、出队等。
```c
void initQueue(Queue** queue) {
*queue = (Queue*)malloc(sizeof(Queue));
(*queue)->front = NULL;
(*queue)->rear = NULL;
}
int isEmpty(Queue* queue) {
return queue->front == NULL;
}
void enqueue(Queue** queue, TreeNode* node) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = node;
newNode->next = NULL;
if ((*queue)->rear == NULL) {
(*queue)->front = newNode;
(*queue)->rear = newNode;
} else {
(*queue)->rear->next = newNode;
(*queue)->rear = newNode;
}
}
TreeNode* dequeue(Queue** queue) {
if (isEmpty(*queue)) {
return NULL;
}
QueueNode* temp = (*queue)->front;
TreeNode* node = temp->data;
(*queue)->front = temp->next;
if ((*queue)->front == NULL) {
(*queue)->rear = NULL;
}
free(temp);
return node;
}
```
4. 实现层序创建二叉树的函数,通过读取输入数据,按照层序次序逐个创建结点,同时进行连接。
```c
void createTree(TreeNode** root) {
printf("请输入结点的个数:");
int n;
scanf("%d", &n);
int i;
int data;
Queue* queue;
initQueue(&queue);
printf("请输入根结点的值:");
scanf("%d", &data);
*root = (TreeNode*)malloc(sizeof(TreeNode));
(*root)->data = data;
(*root)->left = NULL;
(*root)->right = NULL;
enqueue(&queue, *root);
for (i = 1; i < n; i++) {
TreeNode* parent = dequeue(&queue);
printf("请输入结点的值:");
scanf("%d", &data);
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
if (parent->left == NULL) {
parent->left = newNode;
} else {
parent->right = newNode;
}
enqueue(&queue, newNode);
}
}
```
以上是一个简单的层序次序创建二叉树的C语言实现,通过依次读入数据,按照层序将结点连接起来,最终得到完整的二叉树。
阅读全文