#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
struct TreeNode {
int value;
struct TreeNode *left;
struct TreeNode *right;
};
// 定义队列结构
struct QueueNode {
struct TreeNode *node;
struct QueueNode *next;
};
struct Queue {
struct QueueNode *front;
struct QueueNode *rear;
};
// 创建二叉树节点
struct TreeNode* create_node(int value) {
struct TreeNode *new_node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
new_node->value = value;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
// 初始化队列
struct Queue* create_queue() {
struct Queue *queue = (struct Queue*)malloc(sizeof(struct Queue));
queue->front = NULL;
queue->rear = NULL;
return queue;
}
// 判断队列是否为空
int is_empty(struct Queue *queue) {
return queue->front == NULL;
}
// 入队操作
void enqueue(struct Queue *queue, struct TreeNode *node) {
struct QueueNode *new_node = (struct QueueNode*)malloc(sizeof(struct QueueNode));
new_node->node = node;
new_node->next = NULL;
if (is_empty(queue)) {
queue->front = new_node;
queue->rear = new_node;
} else {
queue->rear->next = new_node;
queue->rear = new_node;
}
}
// 出队操作
struct TreeNode* dequeue(struct Queue *queue) {
if (is_empty(queue)) {
return NULL;
}
struct QueueNode *temp = queue->front;
struct TreeNode *node = temp->node;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
return node;
}
// 释放队列内存
void free_queue(struct Queue *queue) {
while (!is_empty(queue)) {
dequeue(queue);
}
free(queue);
}
// 层序遍历二叉树
void level_order_traversal(struct TreeNode *root) {
if (root == NULL) {
return;
}
struct Queue *queue = create_queue(); // 创建队列
enqueue(queue, root); // 将根节点入队
while (!is_empty(queue)) {
struct TreeNode *current_node = dequeue(queue); // 从队列中取出节点
printf("%d ", current_node->value); // 访问节点
// 将左子节点入队
if (current_node->left != NULL) {
enqueue(queue, current_node->left);
}
// 将右子节点入队
if (current_node->right != NULL) {
enqueue(queue, current_node->right);
}
}
free_queue(queue); // 释放队列内存
}
// 主函数示例
int main() {
// 创建一个简单的二叉树
struct TreeNode *root = create_node(1);
root->left = create_node(2);
root->right = create_node(3);
root->left->left = create_node(4);
root->left->right = create_node(5);
root->right->right = create_node(6);
printf("层序遍历结果: ");
level_order_traversal(root); // 执行层序遍历
return 0;
}
队列应用:遍历二叉树
最新推荐文章于 2024-10-05 19:23:25 发布