表达式的逆波兰式转化模板

<center> 表达式的逆波兰式 </center>

使用方法

输入合法的表达式,加减乘除,可以带括号,例如:
a+b*(c-d)-e/f

模板

#include<iostream>
#include<string.h>
#include<string>
#include<stack>
//#include<math.h>
using namespace std;
#define mem(x,num) memset(x,num,sizeof(x))
const int N = 1e3 + 5;
const int defaultSize = 100;
int lson[N], rson[N];
int nc = 0;

char op[N];
void Init() {
    mem(lson, 0);
    mem(rson, 0);
    mem(op, 0);
    nc = 0;
}
int build_Tree(char s[], int l, int r) { // Build the expression tree
    int tag1 = -1, tag2 = -1, p = 0;// tag1 stand for add&sub is_exist,tag2 for muti&devide
    int u;
    if (r - l == 1) {// this is only one point in this interval,build it
        u = ++nc;
        lson[u] = rson[u] = 0;
        op[u]=s[l];
        return u;// return self num to fa Node
    }
    for (int i(l); i < r; i++) {
        switch (s[i])// s[i]
        {
        case '(':p++; break;
        case ')':p--; break;
        case '+':case '-':if(!p)tag1 = i; break;// if operator in (),continue
        case '*':case '/':if(!p)tag2 = i; break;
        }
    }
    if (tag1 < 0)tag1 = tag2;// no + or - outside
    if (tag1 < 0)return build_Tree(s, l + 1, r - 1); // no * or / outside mean all operator and num in ()
    u = ++nc;
    lson[u] = build_Tree(s, l, tag1);
    rson[u] = build_Tree(s, tag1 + 1, r);
    op[u] = s[tag1];
    return u;
}
void Post(int rt) {// Postorder
    if (lson[rt] != 0)Post(lson[rt]);
    if (rson[rt] != 0)Post(rson[rt]);
    cout << op[rt] << ' ';
}
int main() {
    char s[defaultSize];
    while (cin>>s) {
        Init();
        int n=0;
        build_Tree(s, 0,strlen(s));
        Post(1);
        cout << endl;
    }
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4347次浏览 75人参与
# AI面会问哪些问题? #
28055次浏览 561人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15300次浏览 222人参与
# 你的实习产出是真实的还是包装的? #
20278次浏览 342人参与
# 找AI工作可以去哪些公司? #
9228次浏览 241人参与
# 春招至今,你的战绩如何? #
65791次浏览 584人参与
# 米连集团26产品管培生项目 #
13377次浏览 285人参与
# 从事AI岗需要掌握哪些技术栈? #
9068次浏览 313人参与
# 中国电信笔试 #
32024次浏览 292人参与
# 你做过最难的笔试是哪家公司 #
33847次浏览 239人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340890次浏览 2175人参与
# 哪些公司真双非友好? #
69639次浏览 289人参与
# 阿里笔试 #
178705次浏览 1317人参与
# 机械人避雷的岗位/公司 #
62704次浏览 393人参与
# 小马智行求职进展汇总 #
25133次浏览 80人参与
# 第一份工作一定要去大厂吗 #
14757次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22106次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26266次浏览 310人参与
# 应届生第一份工资要多少合适 #
20691次浏览 86人参与
# 沪漂/北漂你觉得哪个更苦? #
9950次浏览 194人参与
# 聊聊你的职场新体验 #
336521次浏览 1895人参与
# HR最不可信的一句话是__ #
6312次浏览 114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务