c语言二叉树层次遍历
时间: 2023-10-04 16:04:38 浏览: 117
你可以使用队列来实现二叉树的层次遍历。以下是一个使用C语言的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新的二叉树节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 层次遍历二叉树
void levelOrderTraversal(Node* root) {
if (root == NULL) {
return;
}
// 创建一个队列用于存储节点指针
Node** queue = (Node**)malloc(sizeof(Node*) * 100);
int front = 0; // 队列的前指针,指向队首元素
int rear = 0; // 队列的后指针,指向队尾元素的下一个位置
// 将根节点入队
queue[rear++] = root;
while (front < rear) {
// 出队并访问当前节点
Node* currentNode = queue[front++];
printf("%d ", currentNode->data);
// 将当前节点的左右子节点入队
if (currentNode->left != NULL) {
queue[rear++] = currentNode->left;
}
if (currentNode->right != NULL) {
queue[rear++] = currentNode->right; }
}
// 释放队列内存
free(queue);
}
int main() {
// 创建二叉树
Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 层次遍历二叉树并输出结果
printf("层次遍历结果:");
levelOrderTraversal(root);
printf("\n");
// 释放二叉树内存
free(root->left->left);
free(root->left->right);
free(root->left);
free(root->right);
free(root);
return 0;
}
```
该代码创建了一个二叉树,并使用队列实现了层次遍历。层次遍历会从上往下、从左往右依次访问二叉树的每个节点,并输出节点的数据值。
阅读全文
相关推荐















