#题目描述
从键盘接收扩展先序序列,以二叉链表作为存储结构,建立二叉树。输出这棵二叉树的层次遍历序列。
##样例输入
ABC##DE#G##F###
#样例输出
ABCDEFG
代码实现:
#include<stdio.h>
#include<stdlin=b.h>
#define MAX 100
typedef struct node{
char data;
struct node *Lc;
struct node *Rc;
}BeTree,*BiTree;
typedef struct {
BiTree data[MAX];
int rear,front;
}SeQueue;
//置空
SeQueue * InitQueue(SeQueue *s)
{
s = (SeQueue *)malloc(sizeof(SeQueue));
s->front = s->rear = MAX-1;
return s;
}
void visit(char p)
{printf("%c",p);}
//判空
int IsEmpty(SeQueue *s)
{
if(s->front == s->rear ) return 1;
else
return 0;
}
//入队
void EnterQueue(SeQueue *s,BiTree p)
{
s->rear = (s->rear+1)%MAX;
s->data[s->rear] = p;
}
//出队
BiTree Pop(SeQueue *s,BiTree p)
{
s->front = (s->front +1)%MAX;
p = s->data[s->front];
return p;
}
//层次遍历
void levelTree(BiTree root)
{
SeQueue *s;
BiTree p;
s = InitQueue(s);
EnterQueue(s,root);
while(!IsEmpty(s))
{
p=Pop(s,p);
visit(p->data);
if(p->Lc != NULL)
EnterQueue(s,p->Lc);
if(p->Rc != NULL)
EnterQueue(s,p->Rc);
}
}
//创建二叉树
void Creat(BiTree *root)
{
char ch;
ch = getchar();
if(ch == '#')
*root = NULL;
else
{
*root = (BiTree)malloc(sizeof(BeTree));
(*root)->data = ch;
Creat(&((*root)->Lc));
Creat(&((*root)->Rc));
}
}
int main()
{
BiTree root;
Creat(&root);
levelTree(root);
}