AcWing 1623. 中缀表达式
原题链接
中等
作者:
leo123456
,
2020-08-25 12:28:17
,
所有人可见
,
阅读 534
//1:中序遍历可以得到中缀表达式
//2:看题目就是无脑加括号,递归的过程不是叶节点且不是根节点就加括号
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=30;
int n;
int l[N],r[N];
string w[N];
bool st[N];
int root=1;
string res;
void dfs(int u)
{
bool flag=false;
if((l[u]!=-1||r[u]!=-1)&&u!=root)
{
res+="(";
flag=true;
}
if(l[u]!=-1) dfs(l[u]);
res+=w[u];
if(r[u]!=-1) dfs(r[u]);
if(flag) res+=")";
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>l[i]>>r[i];
if(l[i]!=-1) st[l[i]]=true;
if(r[i]!=-1) st[r[i]]=true;
}
while(st[root]) root++;
dfs(root);
cout<<res<<endl;
return 0;
}