用c语言编写一个层序遍历算法,利用队列结构按层次(同一层自左至右)输出二叉树中所有的结点
时间: 2024-01-21 13:19:52 浏览: 79
以下是用C语言编写的二叉树层序遍历算法,利用队列结构按层次(同一层自左至右)输出二叉树中所有的结点:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
//定义二叉树结构体
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
//定义队列结构体
typedef struct Queue {
int front, rear;
TreeNode* items[MAX_SIZE];
} Queue;
//创建一个新的节点
TreeNode* newNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
//入队操作
void enqueue(Queue* q, TreeNode* item) {
if (q->rear == MAX_SIZE - 1) {
printf("Queue overflow\n");
exit(1);
}
q->items[++q->rear] = item;
}
//出队操作
TreeNode* dequeue(Queue* q) {
if (q->front > q->rear) {
printf("Queue underflow\n");
exit(1);
}
return q->items[q->front++];
}
//层序遍历函数
void levelOrderTraversal(TreeNode* root) {
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = 0;
q->rear = -1;
enqueue(q, root);
while (q->front <= q->rear) {
TreeNode* node = dequeue(q);
printf("%d ", node->data);
if (node->left) {
enqueue(q, node->left);
}
if (node->right) {
enqueue(q, node->right);
}
}
}
//测试主函数
int main() {
TreeNode* 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("层次遍历结果: ");
levelOrderTraversal(root);
printf("\n");
return 0;
}
```
这个程序使用了队列来实现层序遍历。我们首先将根节点入队,然后一个循环中,我们不断出队,并输出出队的节点的值。同时,我们还将该节点的左右子节点(如果有)入队,以便下一层的遍历。这样,我们就可以按照层次顺序输出二叉树中的所有节点。
阅读全文