/* NAME: Bogdan POPESCU SCHOOL: "Grigore Moisil" NATIONAL COMPUTER SCIENCE COLLEGE GRADE: 11 DIVISION: INT5 */ #include #include #include using namespace std; struct nod{ char val; nod *st; nod *dr; }; char s[50]; void paranteze(){ char s1[100]; int j=0; memset(s1,0,sizeof(s1)); s1[0]='('; j=1; for(int i=0;i='A') s1[j++]=s[i]; } } void evaluare(int p, int f, nod *&r){ if(p!=f){ int par=0; int ordin=0; if(s[f]==')' && s[p]=='('){ int ok=1,k=0; for(int i=p+1;i=p;i--){ if(s[i]==')') par++; else if(s[i]=='(') par--; else if(strchr("+-",s[i]) && par==0){ r=new nod; r->val=s[i]; r->st=NULL; r->dr=NULL; evaluare(p,i-1,r->st); evaluare(i+1,f,r->dr); return; ordin=1; } } if(ordin==0){ par=0; if(s[f]==')') par++,i=f-1; else i=f; for(;i>=p;i--){ if(s[i]==')') par++; else if(s[i]=='(') par--; else if(s[i]=='*' && par==0 &&( s[i+1]=='(' || s[i-1]==')' || s[i+1]<='Z' && s[i+1]>='A')){ r=new nod; r->val=s[i]; r->st=NULL; r->dr=NULL; evaluare(p,i-1,r->st); evaluare(i+1,f,r->dr); return; } } } } else{ r=new nod; r->val=s[p]; r->st=NULL; r->dr=NULL; return; } } void prefix(nod *r){ if(r!=NULL){ printf("%c",r->val); prefix(r->st); prefix(r->dr); } } void golire(nod *&r){ if(r!=NULL){ golire(r->st); golire(r->dr); r=NULL; } } int main() { freopen("pip.in","r",stdin); //freopen("pip.in","w",stdout); // paranteze(); nod *r; for(int i=0;i<5;i++){ gets(s); evaluare(0,strlen(s)-1,r); prefix(r); printf("\n"); golire(r); } return 0; }