请用c语言表述二叉树的层序遍历
时间: 2024-12-13 10:16:24 浏览: 2
二叉树层序遍历-实现代码-队列
在C语言中,层序遍历二叉树通常采用队列数据结构来辅助。这里有一个简单的示例,展示如何通过广度优先搜索(BFS)的方式实现层序遍历:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode != NULL) {
newNode->val = data;
newNode->left = newNode->right = NULL;
}
return newNode;
}
// 层次遍历函数
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return; // 如果根节点为空则直接返回
// 初始化一个空队列
Queue* queue = createQueue();
// 将根节点入队
enqueue(queue, root);
while (!isQueueEmpty(queue)) { // 当队列非空时
// 出队并打印当前层节点值
TreeNode* node = dequeue(queue);
printf("%d ", node->val);
// 如果当前节点有左孩子,将左孩子入队
if (node->left != NULL)
enqueue(queue, node->left);
// 如果当前节点有右孩子,将右孩子入队
if (node->right != NULL)
enqueue(queue, node->right);
}
// 删除队列
destroyQueue(queue);
}
// 定义其他辅助函数,如队列操作等...
```
在这个示例中,我们假设已经实现了队列的创建、插入(enqueue)、删除(dequeue)以及检查队列是否为空(isQueueEmpty)和销毁队列(destroyQueue)的函数。实际操作中你需要根据你的需求补充这些部分。
阅读全文