二叉树的层次遍历c语言
时间: 2024-05-10 12:12:00 浏览: 105
二叉树的层次遍历是一种广度优先搜索的算法,它按照从上到下、从左到右的顺序遍历二叉树的每个节点。在C语言中,可以使用队列来实现二叉树的层次遍历。
首先,我们需要定义二叉树的节点结构体:
```c
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
```
接下来,我们可以使用队列来辅助进行层次遍历。具体步骤如下:
1. 创建一个队列,并将根节点入队。
2. 当队列不为空时,执行以下操作:
- 出队一个节点,并访问该节点。
- 如果该节点的左子节点不为空,则将左子节点入队。
- 如果该节点的右子节点不为空,则将右子节点入队。
3. 重复步骤2,直到队列为空。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
void levelOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
// 创建队列
struct TreeNode** queue = (struct TreeNode**)malloc(sizeof(struct TreeNode*));
int front = 0; // 队头指针
int rear = 0; // 队尾指针
// 根节点入队
queue[rear++] = root;
while (front < rear) {
// 出队一个节点
struct TreeNode* node = queue[front++];
// 访问该节点
printf("%d ", node->val);
// 左子节点入队
if (node->left != NULL) {
queue = (struct TreeNode**)realloc(queue, (rear + 1) * sizeof(struct TreeNode*));
queue[rear++] = node->left;
}
// 右子节点入队
if (node->right != NULL) {
queue = (struct TreeNode**)realloc(queue, (rear + 1) * sizeof(struct TreeNode*));
queue[rear++] = node->right;
}
}
// 释放队列内存
free(queue);
}
int main() {
// 构建二叉树
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = 1;
root->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->left->val = 2;
root->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->val = 3;
root->left->left = NULL;
root->left->right = NULL;
root->right->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->right->left->val = 4;
root->right->right = NULL;
root->right->left->left = NULL;
root->right->left->right = NULL;
// 层次遍历二叉树
printf("层次遍历结果:");
levelOrder(root);
// 释放二叉树内存
free(root->left);
free(root->right->left);
free(root->right);
free(root);
return 0;
}
```
运行以上代码,输出结果为:层次遍历结果:1 2 3 4
阅读全文