SDUTOJ 2484 算术表达式的转换(表达式树)
来源:互联网 发布:网络直播行业自律 编辑:程序博客网 时间:2024/06/06 06:14
示例输入
a*b+(c-d/e)*f#
示例输出
+*ab*-c/defa*b+c-d/e*fab*cde/-f*+
#include<iostream>#include<cstring>#include<queue>#include<cstdio>using namespace std;int l[1000],r[1000];char c[1000];int cnt=0;int bu(char s[],int x,int y){ int i,s1=-1,s2=-1,u,p=0; if(y-x==1) { u=++cnt; l[u]=r[u]=0; c[u]=s[x]; return u; } for(i=x;i<y;i++) { if(s[i]=='(') p++; else if(s[i]==')') p--; else if(s[i]=='+'||s[i]=='-') { if(!p) s1=i; } else if(s[i]=='*'||s[i]=='/') { if(!p) s2=i; } } if(s1<0) s1=s2; if(s1<0) return bu(s,x+1,y-1); u=++cnt; l[u]=bu(s,x,s1); r[u]=bu(s,s1+1,y); c[u]=s[s1]; return u;}void preor(int u){ if(u) { printf("%c",c[u]); preor(l[u]); preor(r[u]); }}void midor(int u){ if(u) { midor(l[u]); printf("%c",c[u]); midor(r[u]); }}void postor(int u){ if(u) { postor(l[u]); postor(r[u]); printf("%c",c[u]); }}int main(){ int n,m,i,j,k; char s[100]; while(~scanf("%s",s)) { cnt=0; int len=strlen(s); int u=bu(s,0,len-1); preor(u); printf("\n"); midor(u); printf("\n"); postor(u); printf("\n"); } return 0;}
0 0
- SDUTOJ 2484 算术表达式的转换(表达式树)
- SDUTOJ 2484 算术表达式的转换(栈)
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 网页打开速度测量
- MTD原始设备
- PHP获取通过windows系统命令wmic获取MAC地址、cpu序列号、主板序列号
- oracle分页存储过程
- 欧拉函数之HDU3501 Calculation 2
- SDUTOJ 2484 算术表达式的转换(表达式树)
- FMS4.5( Adobe Flash Media Server4.5)流媒体服务器搭建
- C#命名规范(简述)
- android设置屏幕模式
- java 字符串排列组合
- uva 12504
- Java多线程:Callable、ExecutorService、CountDownLatch、Future和FutureTask
- 数据库学习书单
- 今天开始写博客