P1305 新二叉树 /// 二叉树的先序遍历

题目大意:

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

猜你喜欢

转载自www.cnblogs.com/zquzjx/p/9327081.html