本题来源:《算法竞赛入门》第11章11.11.2
本题给的解法:
核心代码:
int build_tree(string exp,int l,int r)
{
cout<<"l="<<l<<"\tr="<<r<<endl;
int c1,c2,p,u;
c1=-1;
c2=-1;
p=0;
if(r-l<=1)
{
u=++cnt;
chl[u]=chr[u]=0;
operation[u]=exp[x];
return -1;
}
for(int i=l;i<r;++i)
{
switch(exp[i])
{
case '(':++p;break;
case ')':--p;break;
case '+': case '-': if(!p)c1=i;break;
case '*': case '/': if(!p)c2=i;break;
}
}
if(c1<0)
c1=c2;
if(c1<0)
return build_tree(exp,l+1,r-1);
u=++cnt;
chl[u]=build_tree(exp,l,c1);
chr[u]=build_tree(exp,c1+1,r);
operation[u]=exp[c1];
return u;
}
我为了让这个代码对我更加友好写,对这个代码做了一下修改,改完之后的完