摆烂了,复制代码加了点注释
#include<bits/stdc++.h>
using namespace std;
int n,l[25],r[25],f[25];
string s[25];
string g(int x) {//遍历x结点
if(l[x]==-1&&r[x]==-1)//当前节点是子叶
return "("+s[x]+")";//返回当前节点
if(l[x]==-1&&r[x])//没有左孩子
return "("+s[x]+g(r[x])+")";//返回当前节点并遍历右孩子
return "("+g(l[x])+g(r[x])+s[x]+")";//左右孩子都没遍历
}
int main() {
memset(l,-1,sizeof l);
memset(r,-1,sizeof r);
cin>>n;
for(int i=1; i<=n; i ++) {
cin>>s[i]>>l[i]>>r[i];//s[i]是当前节点,l[i]和r[i]是结点的左孩子和右孩子的编号
if(l[i]) f[l[i]]=1;
if(r[i]) f[r[i]]=1;
}
int x=1;
while(f[x])x++;//没有编号的结点是根节点
cout<<g(x);
return 0;
}
作者:大雪莱
链接:https://www.acwing.com/solution/content/120750/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处