1130 Infix Expression (25 分)【难度: 一般 / 知识点: 中序遍历】

在这里插入图片描述
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;
}

Guess you like

Origin blog.csdn.net/qq_46527915/article/details/121548178