题目链接:https://www.luogu.com.cn/problem/P1305
题记:先建立一个数,记录下根节点,之后前序遍历即可。
#include<bits/stdc++.h>
using namespace std;
struct node{//建树
int l=-1,r=-1;
};
node node[30];
bool vis[30];//记录那些字母出现过
bool notroot[30];//记录非结点的字母
void build(int a,int b,int c){//建树
vis[a]=true;
if(b>=0){
vis[b]=true;
node[a].l=b;
notroot[b]=true;
}
if(c>=0){
vis[c]=0;
node[a].r=c;
notroot[c]=true;
}
}
void preorder(int x){
if(x<0)//当节点的值为-1
return;
cout<<char(x+'a');
preorder(node[x].l);
preorder(node[x].r);
}
int main(){
int n;
cin>>n;
string s;
for(int i=0;i<n;i++){
cin>>s;
build(s[0]-'a',s[1]-'a',s[2]-'a');
}
for(int i=0;i<26;i++){
if(vis[i]&&!notroot[i]){
preorder(i);
break;
}
}
cout<<endl;
return 0;
}