数据结构实验之二叉树五:层序遍历
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。
输入
输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据。每行是
一个长度小于50个字符的字符串。
输出
输出二叉树的层次遍历序列。
示例输入
2 abd,,eg,,,cf,,, xnl,,i,,u,,
示例输出
abcdefg xnuli
提示
#include <stdio.h>
#include <stdlib.h>
char ch[50];
typedef struct BiNode
{
char data;
struct BiNode *Lchild, *Rchild;
}*Bitree, BiNode;
typedef struct
{
Bitree *base;
int frond;
int rear;
}squeue;
void creatree(Bitree &T, int &i);
void cengtraver(Bitree T);
void InitQueue(squeue &Q);
void Enqueue(squeue &Q, Bitree p);
Bitree Dequeue(squeue &Q);
int main()
{
Bitree T;
int t;
int i;
scanf("%d",&t);
while(t>0)
{
t--;
scanf("%s",ch);
i=-1;
creatree(T,i);
cengtraver(T);
printf("\n");
}
}
void creatree(Bitree &T, int &i)
{
i++;
if(ch[i]==',')
T=NULL;
else
{
T=(Bitree)malloc(sizeof(BiNode));
T->data=ch[i];
T->Lchild=NULL;
T->Rchild=NULL;
creatree(T->Lchild,i);
creatree(T->Rchild,i);
}
}
void InitQueue(squeue &Q)
{
Q.base=(Bitree *)malloc(50*sizeof(Bitree));
if(Q.base==NULL)
exit(0);
Q.frond=0;
Q.rear=0;
}
void Enqueue(squeue &Q, Bitree p)
{
if((Q.rear+1)%50==Q.frond)
exit(0);
Q.base[Q.rear]=p;
Q.rear=(Q.rear+1)%50;
}
Bitree Dequeue(squeue &Q)
{
Bitree p;
if(Q.frond==Q.rear)
exit(0);
p=Q.base[Q.frond];
Q.frond=(Q.frond+1)%50;
return p;
}
void cengtraver(Bitree T)
{
squeue Q;
InitQueue(Q);
Bitree p;
p=T;
Enqueue(Q,T);
while(Q.frond!=Q.rear&&p!=NULL)
{
p=Dequeue(Q);
printf("%c",p->data);
if(p->Lchild!=NULL)
Enqueue(Q,p->Lchild);
if(p->Rchild!=NULL)
Enqueue(Q,p->Rchild);
}
}