解析
子问题是 ( + 左儿子 + 当前点 + 右儿子 + ),但是根不要加()
特判根即可
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N=30;
string v[N];
int n, l[N], r[N];
bool hasf[N];
int rt=1;
string dfs(int u) {
if(u==-1) return "";
if(l[u]==-1 && r[u]==-1) return v[u];
string ls, rs;
ls=dfs(l[u]);
rs=dfs(r[u]);
if(u==rt) return ls+v[u]+rs;
return "("+ls+v[u]+rs+")";
}
int main() {
cin >> n;
for(int i=1; i<=n; i++) {
cin >> v[i] >> l[i] >> r[i];
if(~l[i]) hasf[l[i]]=true;
if(~r[i]) hasf[r[i]]=true;
}
while(hasf[rt]) rt++;
cout << dfs(rt) << '\n';
}