//////////////////////////////////////////////////
//Caculate2()公有成员函数
//递归:通过后序遍历表达式来计算当前表达式的值
//////////////////////////////////////////////////
double Expression::Caculate2(
BinTreeNode<ExpNode>* subTree)
{
if(subTree!=NULL)
{
if(subTree->data.etype==0)
//如果遍历到的是数据结点
return subTree->data.info.data;
else
//如果遍历到的是运算符结点
{
char op=subTree->data.info.op; //获取运算符
double x=Caculate2(subTree->leftChild);
double y=Caculate2(subTree->rightChild);
double res;
switch(op)
//根据不同的运算符对弹出的数据进行计算
{
//左右括号因为是不需运算符的运算符,所以无需列在此处
case '+':
res=x+y;break;
case '-':
res=x-y;break;
case '*':
res=x*y;break;
case '/':
res=x/y;break;
case '^':
res=pow(x,y);
break;
case '%':
res=int(x)%int(y);
break;
};
return res;
};
}
else
return 0;
};
///////////////////////////////Caculate2()函数结束