AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 校园
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

AcWing 1623. 中缀表达式    原题链接    简单

作者: 作者的头像   senkuIgM ,  2022-05-14 14:42:38 ,  所有人可见 ,  阅读 20


0


解析

子问题是 ( + 左儿子 + 当前点 + 右儿子 + ),但是根不要加()
特判根即可

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';
}

0 评论

你确定删除吗?
1024
x

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息