用C语言写层次二叉树遍历
时间: 2023-12-29 20:50:00 浏览: 34
层次遍历又称广度优先遍历,可以使用队列来实现。具体步骤如下:
1. 创建一个队列,用于存放待遍历节点。
2. 将根节点入队。
3. 循环执行以下步骤,直到队列为空:
1. 取出队首节点,并输出该节点的值。
2. 如果该节点有左子节点,将左子节点入队。
3. 如果该节点有右子节点,将右子节点入队。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树节点
TreeNode* createNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 层次遍历
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
// 创建队列
TreeNode* queue[100];
int front = 0, rear = 0;
// 根节点入队
queue[rear++] = root;
// 循环取出队首节点
while (front < rear) {
TreeNode* node = queue[front++];
printf("%d ", node->data);
// 如果有左子节点,入队
if (node->left != NULL) {
queue[rear++] = node->left;
}
// 如果有右子节点,入队
if (node->right != NULL) {
queue[rear++] = node->right;
}
}
}
int main() {
// 创建二叉树
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 层次遍历
printf("层次遍历:");
levelOrderTraversal(root);
return 0;
}
```
输出结果为:1 2 3 4 5 6 7。