题目大意:

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;
}
View Code

相关文章:

  • 2022-01-29
  • 2022-01-09
  • 2022-03-03
  • 2022-12-23
  • 2021-11-04
  • 2022-01-30
  • 2022-01-19
  • 2022-01-20
猜你喜欢
  • 2021-08-19
  • 2022-12-23
  • 2021-04-07
  • 2021-05-18
  • 2021-10-04
  • 2022-01-26
相关资源
相似解决方案