https://pintia.cn/problem-sets/994805342720868352/problems/994805347921805312
通过入度0找到根节点,然后中序遍历。
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int>l,r;
int n,d[25];
string val[25];
string s;
void dfs(int u)
{
if(u==-1) return;
if(!(l[u]==-1&&r[u]==-1)) s+="(";
if(l[u]!=-1) dfs(l[u]);
s+=val[u];
if(r[u]!=-1) dfs(r[u]);
if(!(l[u]==-1&&r[u]==-1)) s+=")";
}
int main(void)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>val[i];
int a,b; cin>>a>>b;
l[i]=a,r[i]=b;
if(a!=-1) d[a]++;
if(b!=-1) d[b]++;
}
int root=0;
for(int i=1;i<=n;i++) if(!d[i]) root=i;
dfs(l[root]);
s+=val[root];
dfs(r[root]);
cout<<s;
return 0;
}