c语言二叉树的层次遍历
作者:野牛程序员:2024-01-03 21:48:37C语言阅读 2868
使用队列实现C语言中二叉树的层次遍历。下面是一个简单的例子:
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
};
// 定义队列节点
struct QueueNode {
struct TreeNode* data;
struct QueueNode* next;
};
// 定义队列
struct Queue {
struct QueueNode* front;
struct QueueNode* rear;
};
// 初始化队列
void initializeQueue(struct Queue* q) {
q->front = q->rear = NULL;
}
// 检查队列是否为空
int isQueueEmpty(struct Queue* q) {
return (q->front == NULL);
}
// 入队列
void enqueue(struct Queue* q, struct TreeNode* node) {
struct QueueNode* newNode = (struct QueueNode*)malloc(sizeof(struct QueueNode));
newNode->data = node;
newNode->next = NULL;
if (q->rear == NULL) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队列
struct TreeNode* dequeue(struct Queue* q) {
if (isQueueEmpty(q)) {
return NULL;
}
struct QueueNode* temp = q->front;
struct TreeNode* node = temp->data;
q->front = q->front->next;
free(temp);
if (q->front == NULL) {
q->rear = NULL;
}
return node;
}
// 层次遍历二叉树
void levelOrderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
struct Queue q;
initializeQueue(&q);
enqueue(&q, root);
while (!isQueueEmpty(&q)) {
struct TreeNode* current = dequeue(&q);
printf("%d ", current->data);
if (current->left != NULL) {
enqueue(&q, current->left);
}
if (current->right != NULL) {
enqueue(&q, current->right);
}
}
}
// 测试
int main() {
// 构建一个简单的二叉树
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->data = 1;
root->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->data = 2;
root->left->left = root->left->right = NULL;
root->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->data = 3;
root->right->left = root->right->right = NULL;
// 进行层次遍历
printf("层次遍历结果: ");
levelOrderTraversal(root);
// 释放内存
free(root->left);
free(root->right);
free(root);
return 0;
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:c++二叉树的层次遍历
- 下一篇:c二叉树的后序遍历(非递归)
