题目大意:
https://www.luogu.org/problemnew/show/P1305
由题目可知,输入首位为 子树的根 其后为其左右儿子
则除各行首位后的位置中 没有出现的那个字母肯定为这整棵树的根
从其出发就可找出先序排列

#include <bits/stdc++.h> using namespace std; int n, flag[30]; vector<int>vec[30]; void print(char ch) { printf("%c",ch); for(int i=0;i<vec[ch-'a'].size();i++) print(vec[ch-'a'][i]+'a'); } int main() { while(~scanf("%d",&n)) { string str; for(int i=0;i<n;i++) { char ch[5]; scanf("%s",ch); str+=ch[0]; if(ch[1]!='*') vec[ch[0]-'a'].push_back(ch[1]-'a'),flag[ch[1]-'a']=1; if(ch[2]!='*') vec[ch[0]-'a'].push_back(ch[2]-'a'),flag[ch[2]-'a']=1; } for(int i=0;i<str.size();i++) if(!flag[str[i]-'a']) { print(str[i]); break; } } return 0; }