在这里#include<iostream>
using namespace std;
struct node{
string v;
node *r,*l;
};
void preOrder(node *t)
{
if(t==NULL)
return;
cout<<t->v;
preOrder(t->l);
preOrder(t->r);
}
void in2T(string in,node *&t)
{
if(t==NULL)
{
t = new node;
t->l=t->r=NULL;
}
int op = 9999;
int idx = -1;
int ex = 0;
for(int i=in.length()-1;i>=0;i--)
{
if(in[i]==')')
{
ex+=2;
}
else if(in[i]=='(')
{
ex-=2;
}
else if(in[i]=='+'||in[i]=='-')
{
if(ex+1<op)
{
idx=i;
op = ex+1;
}
}
else if(in[i]=='*'||in[i]=='/')
{
if(ex+2<op)
{
idx =i;
op = ex +2;
}
}
}
if(idx==-1)
{
int idx1,idx2;
for(idx1=0;idx1<in.length();idx1++)
{
if(in[idx1]!='(')
break;
}
for(idx2=in.length()-1;idx2>=0;idx2--)
{
if(in[idx2]!=')')
break;
}
t->v = in.substr(idx1,idx2-idx1+1);
return;
}
t->v=in[idx];
in2T(in.substr(0,idx),t->l);
in2T(in.substr(idx+1,in.length()-idx-1),t->r);
}
int main()
{
string in;
getline(cin,in);
node *root =NULL;
in2T(in,root);
preOrder(root);
cout<<endl;
return 0;
}
插入代码片