示例输入
示例输出
+*ab*-c/def
a*b+c-d/e*f
ab*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;
}