C语言编程实现,己知一棵以二叉链表方式存储的二叉树,求该二叉树的层次遍历
时间: 2024-12-03 12:16:59 浏览: 2
在C语言中,要实现二叉树的层次遍历(也称广度优先搜索,BFS),通常会使用队列数据结构来辅助操作。这里是一个简单的示例,假设我们已经有一个二叉链表节点结构:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 队列结构体用于存储节点及其层次
typedef struct QueueNode {
TreeNode* node;
int level;
} QueueNode, *Queue;
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return; // 如果根节点为空,直接返回
Queue queue = (Queue)malloc(sizeof(QueueNode)); // 创建一个空队列
QueueNode* front = queue; // 初始化队列头指针
front->node = root;
front->level = 0;
queue->next = NULL;
while (front != NULL) { // 当队列非空时循环
TreeNode* current = front->node;
front = front->next;
printf("%d ", current->val); // 输出当前层所有节点值
if (current->left != NULL) { // 将左子节点入队
QueueNode* newFront = (QueueNode*)malloc(sizeof(QueueNode));
newFront->node = current->left;
newFront->level = front->level + 1;
newFront->next = queue;
queue = newFront;
}
if (current->right != NULL) { // 同理,将右子节点入队
QueueNode* newFront = (QueueNode*)malloc(sizeof(QueueNode));
newFront->node = current->right;
newFront->level = front->level + 1;
newFront->next = queue;
queue = newFront;
}
}
free(queue); // 释放内存
}
```
阅读全文