在数据结构与算法的学习中,C语言层序遍历是一个非常基础又重要的概念。尤其当我们处理二叉树这类非线性结构时,层序遍历能帮助我们按“从上到下、从左到右”的顺序访问每个节点。本教程将用最通俗易懂的方式,带小白一步步理解并实现二叉树层序遍历。
层序遍历(Level Order Traversal),也叫广度优先搜索(BFS, Breadth-First Search),是指按照树的层级,逐层从左到右访问所有节点。例如:
如上图所示,若一棵二叉树的结构如下:
1 / \ 2 3 / \ / 4 5 6
那么它的层序遍历结果就是:1 → 2 → 3 → 4 → 5 → 6。
由于层序遍历是“先进先出”(FIFO)的访问方式,因此我们通常使用队列(Queue)来辅助实现。每当访问一个节点,就将其左右子节点依次入队;然后从队首取出下一个待访问节点,如此循环,直到队列为空。
下面我们将用C语言完整实现C语言BFS算法。为了便于理解,我们将分步讲解。
typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right;} TreeNode; 由于C标准库没有内置队列,我们用数组模拟一个固定大小的队列(实际项目中建议用链式队列):
#define MAX_SIZE 100typedef struct Queue { TreeNode* items[MAX_SIZE]; int front; int rear;} Queue;// 初始化队列void initQueue(Queue* q) { q->front = 0; q->rear = 0;}// 入队void enqueue(Queue* q, TreeNode* node) { if (q->rear < MAX_SIZE) { q->items[q->rear++] = node; }}// 出队TreeNode* dequeue(Queue* q) { if (q->front < q->rear) { return q->items[q->front++]; } return NULL;}// 判断队列是否为空int isEmpty(Queue* q) { return q->front == q->rear;} void levelOrderTraversal(TreeNode* root) { if (root == NULL) return; Queue q; initQueue(&q); enqueue(&q, root); while (!isEmpty(&q)) { TreeNode* current = dequeue(&q); printf("%d ", current->data); if (current->left != NULL) { enqueue(&q, current->left); } if (current->right != NULL) { enqueue(&q, current->right); } }} #include#include // (此处插入上述 TreeNode 和 Queue 的定义及函数)int main() { // 构建示例二叉树 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->data = 1; root->left = (TreeNode*)malloc(sizeof(TreeNode)); root->left->data = 2; root->right = (TreeNode*)malloc(sizeof(TreeNode)); root->right->data = 3; root->left->left = (TreeNode*)malloc(sizeof(TreeNode)); root->left->left->data = 4; root->left->right = (TreeNode*)malloc(sizeof(TreeNode)); root->left->right->data = 5; root->right->left = (TreeNode*)malloc(sizeof(TreeNode)); root->right->left->data = 6; root->right->right = NULL; root->left->left->left = root->left->left->right = NULL; root->left->right->left = root->left->right->right = NULL; root->right->left->left = root->right->left->right = NULL; printf("层序遍历结果:"); levelOrderTraversal(root); printf("\n"); return 0;}
编译并运行上述代码,输出为:
层序遍历结果:1 2 3 4 5 6
通过本教程,你已经掌握了如何用C语言实现层序遍历实现教程中的核心逻辑。关键点在于:使用队列模拟BFS过程,逐层处理节点。这种思想不仅适用于二叉树,还可扩展到图的广度优先搜索。
记住这四个关键词: C语言层序遍历、 二叉树层序遍历、 C语言BFS算法、 层序遍历实现教程。 它们将帮助你在面试或项目中快速定位相关知识。
动手试试吧!修改树的结构,观察输出变化,加深理解。
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124065.html