题目描述
从键盘接收扩展先序序列,以二叉链表作为存储结构,建立二叉树。输出这棵二叉树的层次遍历序列。
样例输入
ABC##DE#G##F###
样例输出
ABCDEFG
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Node
{
char data;
struct Node *leftChild;
struct Node *rightChild;
}BiNode, *BiTree;
typedef struct{
BiNode node[MAXSIZE];
int front, rear;
}SeqQueue;
int InitQueue(SeqQueue *Q)
{
Q->front = Q->rear = -1;
}
int EmptyQueue(SeqQueue *Q)
{
if(Q->front == Q->rear)
return 1;
return 0;
}
int InQueue(SeqQueue *Q, BiNode* p)
{
if(Q->rear == MAXSIZE-1)
return 0;
Q->rear++;
Q->node[Q->rear] = *p;
return 1;
}
int OutQueue(SeqQueue *Q, BiNode* p)
{
if(EmptyQueue(Q))
{
return 0;
}
else
{
Q->front++;
*p = Q->node[Q->front];
return 1;
}
}
void CreateBiTree(BiTree *root) {
char ch;
ch = getchar();
if (ch == '#') {
(*root) = NULL;
}
else {
(*root) = (BiTree)malloc(sizeof(BiNode));
(*root)->data = ch;
CreateBiTree(&((*root)->leftChild));
CreateBiTree(&((*root)->rightChild));
}
}
void LevelOrder(BiTree root) {
SeqQueue sq;
BiTree p, q;
InitQueue(&sq);
InQueue(&sq, root);
q = root;
while (!EmptyQueue(&sq)) {
p = q;
OutQueue(&sq, p);
printf("%c", p->data);
if (p->leftChild != NULL) {
InQueue(&sq, p->leftChild);
}
if (p->rightChild != NULL) {
InQueue(&sq, p->rightChild);
}
}
}
int main(void) {
BiTree root = NULL;
CreateBiTree(&root);
LevelOrder(root);
return 0;
}