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
原创粉丝点击