从下往上二叉树层次遍历C代码
时间: 2024-11-30 14:23:16 浏览: 21
在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* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 层次遍历函数
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
// 初始化队列,并将根节点入队
Queue* queue = createQueue();
enqueue(queue, root);
while (!isEmpty(queue)) {
// 出队并处理当前层的所有节点
TreeNode* curr = dequeue(queue);
printf("%d ", curr->val); // 打印节点值
// 将左右子节点入队,如果存在
if (curr->left != NULL) {
enqueue(queue, curr->left);
}
if (curr->right != NULL) {
enqueue(queue, curr->right);
}
}
destroyQueue(queue); // 清理队列
}
// 简化版的队列和操作函数(这里假设已经实现了)
typedef struct Queue {
// 队列元素和相关的操作...
} Queue;
Queue* createQueue();
int isEmpty(Queue* queue);
TreeNode* dequeue(Queue* queue);
void enqueue(Queue* queue, TreeNode* node);
void destroyQueue(Queue* queue);
int main() {
// 假设你已经有了一个二叉树结构
TreeNode* root = ...; // 根节点的创建和初始化
levelOrderTraversal(root);
printf("\n"); // 结束一层后换行
return 0;
}
阅读全文