问答题
假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树BT中,写出计算该算术表达式值的算法。【东北大学2000年】
【正确答案】正确答案:算法的基本设计思想:以二叉树表示算术表达式,根结点用于存储运算符。先分别求出左子树和右子树表示的子表达式的值,最后根据根结点的运算符的要求,计算出表达式的最后结果。算法的代码: typedef struct node( float val; char optr; //只取"+", "一", "*", "/" struct node *lchild, *rchild }BiNode,*BiTree; float PostEval(BiTree bt) { //以后序遍历算法求以二叉树表示的算术表达式的值 float lv,rv; if(bt一>lchild==NULL &&bt一>rchild==NULL) { return bt一>val; } e1Se { lv=PostEval(bt->ichiid); //求左子树表示的子表达式的值 rv=PostEval(bt->rchiid); //求右了树表示的子表达式的值 switch(bt一>optr) { Case"+":valUe=lv+rv: break; Case"一":valUe=1V—rv: break; case"*":valme=1v*rv: break; Case"/":valUe=1v/rv: } return valUe; } }//PoStEval
【答案解析】