如何用C语言实现完全二叉树的层序遍历算法?
时间: 2024-11-15 21:21:57 浏览: 74
在C语言中,实现完全二叉树的层序遍历(也称为广度优先搜索,BFS)通常会利用队列数据结构。以下是步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个空的队列用于存储节点
#define MAX 100
TreeNode queue[MAX];
int front = -1, rear = -1;
// 入队操作
void enqueue(TreeNode* node) {
if (front == rear) {
printf("Queue is full, can't enqueue.\n");
return;
}
queue[++rear] = *node;
}
// 出队操作
TreeNode* dequeue() {
if (front == rear) {
printf("Queue is empty, can't dequeue.\n");
return NULL;
}
TreeNode* temp = queue[front++];
return temp;
}
// 层次遍历函数
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
// 将根节点入队
enqueue(root);
while (front != rear) {
// 出队并打印当前层节点值
TreeNode* node = dequeue();
printf("%d ", node->val);
// 如果左孩子存在,入队
if (node->left) {
enqueue(node->left);
}
// 如果右孩子存在,入队
if (node->right) {
enqueue(node->right);
}
}
}
// 测试
int main() {
// 构建示例完全二叉树...
TreeNode* root = ...; // 你需要在这里构建你的完整二叉树
levelOrderTraversal(root);
return 0;
}
```
在这个例子中,`levelOrderTraversal`函数首先检查根节点是否存在,然后将根节点入队。接着进入一个循环,直到队列为空。每次循环,它都会出队一个节点,打印其值,然后将其左右子节点(如果存在的话)依次入队。这样就可以按照层次顺序访问每一个节点了。
阅读全文