1.树的遍历
2.在每个非根节点、非叶子节点的两边加上个括号
#include <bits/stdc++.h>
using namespace std;
struct node{
string s;
int l,r;
};
vector<node > T;
bool vis[25];
int n;
//st标记是否为根节点
void dfs(int rt,int st){
int f=0;
if(st&&(T[rt].l!=-1||T[rt].r!=-1))
cout<<'(';
if(T[rt].l!=-1) dfs(T[rt].l,1);
cout<<T[rt].s;
if(T[rt].r!=-1) dfs(T[rt].r,1);
if(st&&(T[rt].l!=-1||T[rt].r!=-1))
cout<<')';
}
int main()
{
cin>>n;
T.resize(n+1);
for(int i=1;i<=n;i++){
string s;
int l,r;
cin>>s>>l>>r;
T[i].s = s;
T[i].l = l==-1?-1:l;
T[i].r = r==-1?-1:r;
if(l!=-1) vis[l] = true;
if(r!=-1) vis[r] = true;
}
int rt;
for(int i=1;i<=n;i++){
if(vis[i]==false)
{
rt = i;
break;
}
}
dfs(rt,0);
return 0;
}