层次遍历二叉树C语言
时间: 2024-08-12 21:07:41 浏览: 70
层次遍历(Breadth-First Search, BFS)是一种用于访问二叉树或图中节点的算法,它按照从上到下、从左到右的顺序逐层访问。在C语言中,层次遍历通常使用队列数据结构来实现。
以下是使用C语言实现二叉树层次遍历的基本步骤:
1. 定义二叉树节点结构(假设名为`Node`):
```c
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
```
2. 定义一个队列来存储节点,并初始化一个空的队列:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 初始化一个空队列
queue_t *create_queue() {
queue_t *queue = (queue_t *)malloc(sizeof(queue_t));
queue->head = NULL;
queue->tail = NULL;
return queue;
}
// 其他队列操作,如入队、出队等...
```
3. 层次遍历函数:
```c
void levelOrderTraversal(Node* root) {
if (root == NULL) return;
queue_t *queue = create_queue();
queue->head = queue->tail = (struct queue_node*)malloc(sizeof(struct queue_node));
((struct queue_node*)queue->tail)->data = root->data;
((struct queue_node*)queue->tail)->next = NULL;
while (queue->head != NULL) {
Node *temp = queue->head->data;
printf("%d ", temp->data);
// 将当前节点的左右子节点入队
if (temp->left) {
queue->tail->next = (struct queue_node*)malloc(sizeof(struct queue_node));
queue->tail = queue->tail->next;
queue->tail->data = temp->left;
queue->tail->next = NULL;
}
if (temp->right) {
queue->tail->next = (struct queue_node*)malloc(sizeof(struct queue_node));
queue->tail = queue->tail->next;
queue->tail->data = temp->right;
queue->tail->next = NULL;
}
// 移除已经访问过的节点
queue->head = queue->head->next;
}
// 清理队列
free(queue->head);
free(queue);
}
```
阅读全文