考查的知识点:
只有右子树的时候需要特殊处理
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
const int N = 25;
int Root = 1;
struct node{
string val;
int left, right;
}E[N];
int vis[505];
void dfs(int root){
if(root==-1) return;
cout<<"(";
if(E[root].left != -1){
dfs(E[root].left);
dfs(E[root].right);
cout<<E[root].val;
}else{
cout<<E[root].val;
dfs(E[root].right);
}
cout<<")";
}
int main(){
int n;
cin>>n;
for(int i = 1; i <= n; i++){
cin>>E[i].val>>E[i].left>>E[i].right;
if(E[i].left != -1) vis[E[i].left] = 1;
if(E[i].right != -1) vis[E[i].right] = 1;
}
while(vis[Root]) Root++;
dfs(Root);
return 0;
}