#include <iostream>#include <stack>#include <string>using namespace std;int prior[1000]=...{0};char oper[]=...{'(',')','+','-','*','/','^'};int testcase;string expr;char tmpchr,c;class Node...{public: char oper; Node * left; Node * right; Node()...{left=right=NULL;}; Node(char op)...{left=right=NULL;oper=op;}};stack<char>operStack;stack<Node *>dataStack;void generateTree(Node * &p,int idx)...{ tmpchr=expr[idx]; while(!(operStack.top()=='#' && tmpchr=='#'))...{ if(!prior[tmpchr])...{ p=new Node(tmpchr); dataStack.push(p); } else ...{ switch(tmpchr)...{ case '(': operStack.push('('); break; case ')': c=operStack.top(); operStack.pop(); while(c!='(')...{ p=new Node(c); p->right=dataStack.top(); dataStack.pop(); p->left=dataStack.top(); dataStack.pop(); dataStack.push(p); c=operStack.top(); operStack.pop(); } break; default: while(operStack.size() && prior[operStack.top()]>prior[tmpchr])...{ p=new Node(operStack.top()); p->oper=operStack.top(); if(dataStack.size())...{p->right=dataStack.top(); dataStack.pop();} if(dataStack.size())...{p->left=dataStack.top(); dataStack.pop();} dataStack.push(p); operStack.pop(); } if(tmpchr!='#')operStack.push(tmpchr); break; } } if(tmpchr!='#')tmpchr=expr[++idx]; } p=dataStack.top(); dataStack.pop();}inline void freeTree(Node * p)...{ if(p->left!=NULL)freeTree(p->left); if(p->right!=NULL)freeTree(p->right); delete(p);}void postOrderTraverse(Node * p)...{ if(p)...{ postOrderTraverse(p->left); postOrderTraverse(p->right); cout<<p->oper; }}Node * tree;int main()...{ cin>>testcase; for(int i=0;i<7;i++)prior[oper[i]]=i+2; prior['#']=1; while(testcase--)...{ cin>>expr; while(operStack.size())operStack.pop(); operStack.push('#'); while(dataStack.size())dataStack.pop(); generateTree(tree,1); postOrderTraverse(tree); cout<<endl; freeTree(tree); }} // 输入格式 #表达式#