c语言二叉树层遍历代码
时间: 2024-10-28 21:15:20 浏览: 44
【C语言二叉树遍历实例】C语言二叉树遍历实例
在C语言中,我们可以使用队列数据结构来实现二叉树的层序遍历(即按层次顺序访问节点)。这里提供一个基本的非递归版本的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <queue>
// 定义二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 队列操作函数
void enqueue(TreeNode** queue, TreeNode* node) {
if (node == NULL) return;
queue[0] = node;
node->right = node->left = NULL; // 清空节点指向的左右孩子
node = queue[0]; // 更新当前节点指针
for (int i = 1; queue[i] != NULL; i++) {
queue[i - 1]->right = queue[i];
queue[i]->left = queue[i - 1];
queue[i++] = NULL; // 将下一个节点放入队列
}
}
// 层次遍历的核心部分
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return;
int queueSize = 0;
TreeNode** queue = (TreeNode**)malloc(sizeof(TreeNode*) * 10); // 初始化队列
enqueue(&queue, root);
while (queue[queueSize] != NULL) {
printf("%d ", queue[queueSize]->val); // 访问当前层的节点
queueSize++;
// 弹出并添加下一层节点到队列
TreeNode* temp = queue[0];
while (temp != NULL) {
TreeNode* nextTemp = temp->right;
enqueue(&queue, temp->left);
enqueue(&queue, temp);
temp = nextTemp;
}
queueSize--;
}
free(queue);
}
int main() {
// 创建二叉树实例,这里是简化的例子,实际应用需要自定义
TreeNode* root = malloc(sizeof(TreeNode));
root->val = 1;
root->left = malloc(sizeof(TreeNode));
root->left->val = 2;
root->right = malloc(sizeof(TreeNode));
root->right->val = 3;
root->left->left = malloc(sizeof(TreeNode));
root->left->left->val = 4;
levelOrderTraversal(root);
return 0;
}
```
阅读全文