假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树 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) ;
}