问答题 给出算法将二叉树表示的表达式二叉树按中缀表达式输出,并加上相应的括号。【北京邮电大学2001五、3(10分)】
【正确答案】正确答案:这是用二叉树表示符号算术表达式的逆问题,即将二叉树表示的表达式还原成原表达式。二叉树的中序遍历序列与原算术表达式基本相同,差别仅在于二叉树表示中消除了括号。将中序序列加上括号就恢复原貌。当根结点运算符优先级高于左子树(或右子树)根结点运算符时,就需要加括号。核心语句段如下: if(bt) (if(bt一>ichild!=null) fbracket:Precede(bt一>data,bt一>ichild一>data) //双亲与左子女运算符优先级 if(bracket==1)printf((); InorderExp(bt一>ichild); //输出左子女表示的算术表达式 if(bracket==1)printf(‘)’); //加上右括号 } printf(bt一>data); //输出根结点 if(bt一>rchild!=null) //输出右子树表示的算术表达式 {bracket=Precede(bt->data,bt一>rchild->data) if(bracket==1)printf(“C); //右子女级别低,加括号 InorderExp(bt->rchi id); if(bracket==1)printf(“)”); } }
【答案解析】