void InitExpTree(BTree &T,string str){
stack<BTree> Tree;
stack<char> ch;
int i=0;
ch.push(‘#‘);
while(str[i]){
if(!In(str[i])){
T=new BTNode;
T->data=str[i++];
T->lchild=NULL;
T->rchild=NULL;
Tree.push(T);
}
else{
if(Precede(ch.top(),str[i])==‘<‘){
ch.push(str[i]);
i++;
}
else if(Precede(ch.top(),str[i])==‘=‘){
ch.pop();
i++;
}
else{
T=new BTNode;
T->data=ch.top();
T->rchild=Tree.top();
Tree.pop();
T->lchild=Tree.top();
Tree.pop();
Tree.push(T);
ch.pop();
}
}
}
while(ch.top()!=‘#‘){
T=new BTNode;
T->data=ch.top();
T->rchild=Tree.top();
Tree.pop();
T->lchild=Tree.top();
Tree.pop();
Tree.push(T);
ch.pop();
}
T=Tree.top();
}
double EvaluateExTree(BTree T){
double sum=0,a,b;
if(!T->rchild&&!T->lchild){
return T->data-‘0‘;
}
a=EvaluateExTree(T->lchild);
b=EvaluateExTree(T->rchild);
switch(T->data){
case ‘+‘:return a+b;
case ‘-‘:return a-b;
case ‘*‘:return a*b;
case ‘/‘:if(b==0){
cout<<"divide 0 error!";
exit(0);
}
return a/b;
}
}
原文:https://www.cnblogs.com/lsr321/p/12775497.html