#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
struct ne{
int node;
int ls;
int rs;
int f;
};
int n;
char a,b,c,d;
ne er[27];
int can[27];
int t;
int fir(ne x)
{
if(x.node)
{
printf("%c",x.node);
fir(er[x.ls]);
fir(er[x.rs]);
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=26;i++)
er[i].node=0;
for(int i=1;i<=n;i++)
{
scanf(" %c%c%c",&a,&b,&c);
can[int(a)-'a'+1]=1;
er[int(a)-'a'+1].node=int(a);
if(b!='*') er[int(a)-'a'+1].ls=int(b)-'a'+1,er[int(b)-'a'+1].f=int(a)-'a'+1,can[int(b)-'a'+1]=1;
else er[int(a)-'a'+1].ls=0;
if(c!='*') er[int(a)-'a'+1].rs=int(c)-'a'+1,er[int(c)-'a'+1].f=int(a)-'a'+1,can[int(b)-'a'+1]=1;
else er[int(a)-'a'+1].rs=0;
}
t=1;
while(er[t].f!=0)
t=er[t].f;
fir(er[t]);
printf("\n");
return 0;
}
数据
in:
20
cns
nd*
dgf
shj
fq*
qlk
gte
k*i
j*a
h*p
ab*
lr*
em*
p**
mo*
t**
i**
r**
o**
b**
out:
20
cns
nd*
dgf
shj
fq*
qlk
gte
k*i
j*a
h*p
ab*
lr*
em*
p**
mo*
t**
i**
r**
o**
b**
错误输出:
cndgtemofqlrkiabshpjab