二叉树的层序遍历(c语言)
时间: 2023-10-04 15:05:34 浏览: 118
二叉树的层序遍历可以用队列来实现。具体步骤如下:
1. 将根节点入队列。
2. 当队列不为空时,执行以下步骤:
a. 将队头节点出队列,并将其值打印。
b. 将队头节点的左子节点和右子节点(如果存在)分别入队列。
下面是一个 C 语言实现的二叉树层序遍历的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 定义队列结构体
typedef struct Queue {
TreeNode **data;
int front, rear;
} Queue;
// 初始化队列
Queue* initQueue(int size) {
Queue *q = (Queue*)malloc(sizeof(Queue));
q->data = (TreeNode**)malloc(sizeof(TreeNode*) * size);
q->front = q->rear = 0;
return q;
}
// 入队列
void enqueue(Queue *q, TreeNode *node) {
q->data[q->rear++] = node;
}
// 出队列
TreeNode* dequeue(Queue *q) {
return q->data[q->front++];
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
// 层序遍历
void levelOrder(TreeNode *root) {
if (root == NULL) return;
Queue *q = initQueue(100);
enqueue(q, root);
while (!isQueueEmpty(q)) {
TreeNode *node = dequeue(q);
printf("%d ", node->val);
if (node->left) enqueue(q, node->left);
if (node->right) enqueue(q, node->right);
}
}
// 创建二叉树
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) return NULL;
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = createTree();
node->right = createTree();
return node;
}
int main() {
TreeNode *root = createTree();
printf("层序遍历结果:");
levelOrder(root);
return 0;
}
```
阅读全文