层次遍历二叉树 c语言
时间: 2024-04-22 15:20:22 浏览: 153
层次遍历二叉树是一种广度优先搜索的算法,它按照从上到下、从左到右的顺序逐层遍历二叉树的节点。下面是一个用C语言实现层次遍历二叉树的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
// 创建新节点
struct TreeNode* createNode(int val) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 层次遍历二叉树
void levelOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
// 创建一个队列用于存储待遍历的节点
struct TreeNode** queue = (struct TreeNode**)malloc(sizeof(struct TreeNode*) * 1000);
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[rear++] = node->left;
}
if (node->right != NULL) {
queue[rear++] = node->right;
}
}
// 释放队列内存
free(queue);
}
int main() {
// 创建二叉树
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 层次遍历二叉树
printf("层次遍历结果:");
levelOrder(root);
return 0;
}
```
这段代码中,我们首先定义了一个二叉树节点的结构体`TreeNode`,包含一个整数值`val`和左右子节点的指针。然后,我们实现了一个`createNode`函数用于创建新的节点。接下来,我们定义了一个`levelOrder`函数用于层次遍历二叉树。在该函数中,我们使用一个队列来存储待遍历的节点,初始时将根节点入队,然后循环执行以下操作:出队当前节点并访问,将当前节点的左右子节点入队。最后,我们在`main`函数中创建了一个二叉树,并调用`levelOrder`函数进行层次遍历。
阅读全文