用C语言实现二叉树的层序遍历并给出注释
时间: 2024-05-07 15:23:05 浏览: 82
C++数据结构与算法二叉树的层序遍历代码及注释
5星 · 资源好评率100%
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// 创建新节点
struct Node* createNode(int data) {
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 层序遍历二叉树
void levelOrderTraversal(struct Node* root) {
if (root == NULL) {
return;
}
// 首先创建一个队列,用于存储每一层的节点
struct Node** queue = (struct Node**)malloc(sizeof(struct Node*));
int front = 0;
int rear = 0;
// 将根节点加入队列中
queue[rear] = root;
rear++;
while (front < rear) {
// 获取队列中的节点
struct Node* current = queue[front];
front++;
// 输出当前节点的值
printf("%d ", current->data);
// 将当前节点的左右子节点加入队列中
if (current->left != NULL) {
queue = (struct Node**)realloc(queue, (rear + 1) * sizeof(struct Node*));
queue[rear] = current->left;
rear++;
}
if (current->right != NULL) {
queue = (struct Node**)realloc(queue, (rear + 1) * sizeof(struct Node*));
queue[rear] = current->right;
rear++;
}
}
}
int main() {
// 创建以下二叉树
// 1
// / \
// 2 3
// / \ / \
// 4 5 6 7
struct Node* 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("Level Order Traversal: ");
levelOrderTraversal(root);
return 0;
}
```
注释如下:
- `struct Node`:定义二叉树的节点结构体,包括节点的值、左子节点和右子节点。
- `createNode`:创建新节点的函数,传入节点的值,返回新节点的指针。
- `levelOrderTraversal`:层序遍历二叉树的函数,传入二叉树的根节点。
- `queue`:动态数组,用于存储每一层的节点。
- `front` 和 `rear`:队列的头部和尾部指针,用于出队和入队操作。
- `queue[rear] = root`:将根节点加入队列中。
- `while (front < rear)`:当队列不为空时进行循环。
- `current = queue[front]`:获取队列中的节点。
- `printf("%d ", current->data)`:输出当前节点的值。
- `queue = (struct Node**)realloc(queue, (rear + 1) * sizeof(struct Node*))`:当需要将节点加入队列中时,重新分配队列的空间。
- `queue[rear] = current->left` 和 `queue[rear] = current->right`:将当前节点的左右子节点加入队列中。
- `main`:创建二叉树并调用 `levelOrderTraversal` 函数进行层序遍历。
阅读全文