void LevelorderTraversal ( BinTree BT ) /* 输出二叉树层序遍历序列 */
时间: 2023-11-28 11:48:12 浏览: 91
层序遍历二叉树
4星 · 用户满意度95%
这是一个输出二叉树层序遍历序列的函数,具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode {
int Data;
BinTree Left;
BinTree Right;
};
typedef struct {
Position Data[MAXSIZE];
int front, rear;
} Queue;
Queue* CreateQueue() {
Queue* Q = (Queue*)malloc(sizeof(Queue));
Q->front = Q->rear = 0;
return Q;
}
int IsEmpty(Queue* Q) {
return Q->front == Q->rear;
}
void Enqueue(Queue* Q, Position X) {
if ((Q->rear + 1) % MAXSIZE == Q->front) {
printf("队列已满\n");
return;
}
Q->Data[Q->rear++] = X;
}
Position Dequeue(Queue* Q) {
if (IsEmpty(Q)) {
printf("队列已空\n");
return NULL;
}
Position X = Q->Data[Q->front++];
return X;
}
void LevelorderTraversal(BinTree BT) {
if (!BT) return;
Queue* Q = CreateQueue();
Enqueue(Q, BT);
while (!IsEmpty(Q)) {
Position T = Dequeue(Q);
printf("%d ", T->Data);
if (T->Left) Enqueue(Q, T->Left);
if (T->Right) Enqueue(Q, T->Right);
}
}
```
该函数先创建一个队列,将根节点入队。之后进入循环,每次出队一个节点,并输出其值。如果该节点有左子树,则将其左子树入队;如果该节点有右子树,则将其右子树入队。循环继续,直到队列为空,即所有节点都已经访问过。
阅读全文