层次遍历二叉树c语言代码
时间: 2023-07-31 15:11:43 浏览: 108
以下是层次遍历二叉树的C语言代码示例:
```
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
void levelOrderTraversal(struct Node* root) {
if (root == NULL) {
return;
}
struct Node** queue = (struct Node**)malloc(sizeof(struct Node*));
int front = 0, rear = 0;
queue[rear++] = root;
while (front < rear) {
struct Node* current = queue[front++];
printf("%d ", current->data);
if (current->left != NULL) {
queue = (struct Node**)realloc(queue, (rear + 1) * sizeof(struct Node*));
queue[rear++] = current->left;
}
if (current->right != NULL) {
queue = (struct Node**)realloc(queue, (rear + 1) * sizeof(struct Node*));
queue[rear++] = current->right;
}
}
free(queue);
}
struct Node* newNode(int data) {
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
int main() {
struct Node* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->left = newNode(6);
root->right->right = newNode(7);
printf("Level order traversal of binary tree is: ");
levelOrderTraversal(root);
return 0;
}
```
在上述代码中,我们定义了一个结构体 `Node` 表示二叉树节点,其中 `data` 表示节点的数据,`left` 表示左子节点,`right` 表示右子节点。
函数 `levelOrderTraversal` 实现了层次遍历二叉树的功能。我们使用一个队列来存储待遍历的节点,初始时将根节点入队。然后在每次循环中,取出队首节点,访问该节点并将其左右子节点入队(若存在)。重复上述操作直到队列为空,即遍历完整棵二叉树。
在 `main` 函数中,我们构建了一棵二叉树,并调用 `levelOrderTraversal` 函数进行层次遍历,并输出结果。
阅读全文