应用题 27.假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树BT中,写出计算该算术表达式值的算法。
【正确答案】 以二叉树表示算术表达式,根结点用于存储运算符。若能先分别求出左子树和右子树表示的子表达式的值,最后就可以根据根结点的运算符的要求,计算出表达式的最后结果。
typedef struct node{
ElemType data;
float val;
char optr; //只取'+','一,'*','/
struct node * lchild,* rchild:
}BiNode,* BiTree:
float PostEval(BiTree bt){ //以后序遍历算法求以二叉树表示的算术表达式的值
float lv,rv:
if(bt!=null){
lv=PostEval(bt一>lchild); //求左子树表示的子表达式的值
rv:PostEval(bt一>rchild); //求右子树表示的子表达式的值
switch(bt一>optr){
case’+’:value=lv+rv;break;
case’一':value=lv—rv;break:
case’*’:value=lv*rv;break:
case’/':value=lv/rv:
}
}
return(value);
}
【答案解析】