1 #include2 #define _for(i,a,b) for(int i = (a);i < b;i ++) 3 typedef long long ll; 4 using namespace std; 5 int N; 6 string s[30]; 7 inline ll read() 8 { 9 ll ans = 0;10 char ch = getchar(), last = ' ';11 while(!isdigit(ch)) last = ch, ch = getchar();12 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();13 if(last == '-') ans = -ans;14 return ans;15 }16 inline void write(ll x)17 {18 if(x < 0) x = -x, putchar('-');19 if(x >= 10) write(x / 10);20 putchar(x % 10 + '0');21 }22 struct TreeNode23 {24 char val;25 TreeNode *left;26 TreeNode *right;27 };28 int go(char c)29 {30 _for(i,0,N)31 if(s[i][0]==c)32 return i;33 return -1;34 }35 TreeNode* build(int cur,char give)36 {37 if(give=='*')38 return NULL;39 TreeNode* t = (TreeNode*)malloc(sizeof(TreeNode));40 t->val = give;41 t->left = build(go(s[cur][1]),s[cur][1]);42 t->right = build(go(s[cur][2]),s[cur][2]);43 return t;44 }45 void preorder(TreeNode *root)46 {47 if(!root)48 return ;49 printf("%c",root->val);50 preorder(root->left);51 preorder(root->right);52 }53 int main()54 {55 TreeNode* root;56 N = read();57 _for(i,0,N)58 cin >> s[i];59 root = build(0,s[0][0]);60 preorder(root);61 return 0;62 }