C语言要求实现一个函数,输出二叉树层序遍历序列
时间: 2024-05-16 21:13:50 浏览: 120
可以使用队列来实现二叉树的层序遍历,具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 定义队列结点
typedef struct QueueNode {
TreeNode* data;
struct QueueNode* next;
} QueueNode;
// 定义队列
typedef struct Queue {
QueueNode* front;
QueueNode* rear;
} Queue;
// 初始化队列
void initQueue(Queue* Q) {
Q->front = Q->rear = NULL;
}
// 判断队列是否为空
int isQueueEmpty(Queue* Q) {
return Q->front == NULL;
}
// 入队
void enqueue(Queue* Q, TreeNode* data) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = NULL;
if (Q->rear == NULL) {
Q->front = Q->rear = newNode;
} else {
Q->rear->next = newNode;
Q->rear = newNode;
}
}
// 出队
TreeNode* dequeue(Queue* Q) {
if (isQueueEmpty(Q)) {
return NULL;
}
QueueNode* front = Q->front;
TreeNode* data = front->data;
Q->front = front->next;
if (Q->front == NULL) {
Q->rear = NULL;
}
free(front);
return data;
}
// 创建二叉树
TreeNode* createTree() {
int data;
scanf("%d", &data);
if (data == -1) {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = data;
root->left = createTree();
root->right = createTree();
return root;
}
// 层序遍历
void levelOrderTraversal(TreeNode* root) {
Queue Q;
initQueue(&Q);
enqueue(&Q, root);
while (!isQueueEmpty(&Q)) {
TreeNode* node = dequeue(&Q);
printf("%d ", node->data);
if (node->left) {
enqueue(&Q, node->left);
}
if (node->right) {
enqueue(&Q, node->right);
}
}
}
int main() {
TreeNode* root = createTree();
printf("层序遍历序列:");
levelOrderTraversal(root);
printf("\n");
return 0;
}
```
在该程序中,我们首先定义了二叉树结点 `TreeNode` 和队列结点 `QueueNode`,以及队列 `Queue`。然后,我们实现了队列的基本操作,包括初始化队列、判断队列是否为空、入队和出队。接着,我们实现了创建二叉树的函数 `createTree()` 和层序遍历的函数 `levelOrderTraversal()`。其中,层序遍历使用队列来实现,从根节点开始,每次出队一个结点,将其左右子结点入队,直到队列为空为止。最后,我们在 `main()` 函数中调用 `createTree()` 和 `levelOrderTraversal()` 函数,输出二叉树的层序遍历序列。
阅读全文