写了一下午结果还得靠学别人才会写,原来要用队列知识,别人建队列的方法好麻烦我直接用一个数组代替了嘻嘻嘻
#include <stdio.h>
struct Tree
{
int left,right;
}T[99];
int F=1;
int RES[99];
int rear=0;
int head=1;
int QUEUE[99];
int BT(int N,struct Tree T[])
{int i,out;
char cl,cr;
int Check[N];
out=0;
for(i=0;i<N;i++)
{
Check[i]=0;
}
for(i=0;i<N;i++)
{ T[i].left=-1;
T[i].right=-1;
scanf("%c %c\n",&cl,&cr);
if(cl!='-')
{Check[cl-'0']=1;
T[i].left=cl-'0';
}
if(cr!='-')
{Check[cr-'0']=1;
T[i].right=cr-'0';
}
}
for(i=0;i<N;i++)
{
if(Check[i]==0)
out=i;
}
return out;
}
int enqueue(int x)
{
rear++;
QUEUE[rear]=x;
}
int chuqueue()
{int x;
x=head;
head++;
RES[F++]=QUEUE[x];
return QUEUE[x];
}
int kongma()
{
if(head>rear)
return 1;
else
return 0;
}
int PAIXU(int G)
{int x;
if(T[G].left!=-1)
{enqueue(T[G].left);
}
if(T[G].right!=-1)
{enqueue(T[G].right);
}
while(kongma()==0)
{
x=chuqueue();
if(T[x].left!=-1)
{enqueue(T[x].left);
}
if(T[x].right!=-1)
{enqueue(T[x].right);
}
}
}
int main(void) {
int N,G;
int i,x;
scanf("%d\n",&N);
if(N==0)
{printf("0");
return 0;}
G=BT(N,T);
if(N==1)
{printf("0");
return 0;}
for(i=0;i<99;i++)
RES[i]=-1;
RES[0]=G;
PAIXU(G);
for(i=0;RES[i]!=-1;i++)
{x=RES[i];
if((T[x].left==-1)&&(T[x].right==-1))
{
if(RES[i+1]==-1)
printf("%d",RES[i]);
else
printf("%d ",RES[i]);
}
}
return 0;
}