c语言利用队列,编程实现二叉树的层次遍历。 输入格式: 一个字符序列,表示空子树处为*号的二叉树的先序遍历序列。 输出格式: 一个字符序列,表示二叉树的层次遍历序列。
时间: 2024-05-10 12:18:04 浏览: 79
以下是使用队列实现二叉树的层次遍历的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
char 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;
// 创建二叉树
TreeNode* createBinaryTree() {
char ch;
scanf("%c", &ch);
if (ch == '*') { // 如果读到 * 表示空节点,返回 NULL
return NULL;
}
TreeNode *newNode = (TreeNode *) malloc(sizeof(TreeNode));
newNode->data = ch;
newNode->left = createBinaryTree();
newNode->right = createBinaryTree();
return newNode;
}
// 初始化队列
void initQueue(Queue *queue) {
queue->front = queue->rear = NULL;
}
// 判断队列是否为空
int isQueueEmpty(Queue *queue) {
return queue->front == NULL;
}
// 入队列
void enqueue(Queue *queue, TreeNode *data) {
QueueNode *newNode = (QueueNode *) malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = NULL;
if (isQueueEmpty(queue)) {
queue->front = queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队列
TreeNode* dequeue(Queue *queue) {
if (isQueueEmpty(queue)) {
return NULL;
}
QueueNode *node = queue->front;
TreeNode *data = node->data;
queue->front = node->next;
free(node);
if (queue->front == NULL) {
queue->rear = NULL;
}
return data;
}
// 二叉树层次遍历
void levelOrderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
Queue queue;
initQueue(&queue);
enqueue(&queue, root);
while (!isQueueEmpty(&queue)) {
TreeNode *node = dequeue(&queue);
printf("%c ", node->data);
if (node->left != NULL) {
enqueue(&queue, node->left);
}
if (node->right != NULL) {
enqueue(&queue, node->right);
}
}
}
int main() {
TreeNode *root = createBinaryTree();
printf("层次遍历结果:\n");
levelOrderTraversal(root);
return 0;
}
```
输入示例:
```
ABD**E**CF**
```
输出示例:
```
层次遍历结果:
A B D E C F
```
阅读全文