输入一个算术表达式,判断该表达式是否合法,若不合法,给出错误信息;若合法,则输出合法表达式的表达式树。
【数据模型】二叉表示树具有以下特点:1. 叶子结点一定是操作数 2. 分支结点一定是操作符
【算法分析】表达式不合法有三种情况:①左右括号不匹配;②变量名不合法;③运算符两旁无参与运算的变量或数。
【解题思路】1. 根据运算符的优先顺序,将表达式结合成(左操作符 运算符 右操作符)的形式
2. 由外层括号开始,运算符作为二叉表示树的根结点,左操作数作为左子树,右操作数作为右子树
3. 如果某子树对应的操作数是一个表达式,则重复第2步,直到该子树对应的操作数不能分解。
【具体实现】处理时,首先找到运算级别最低的运算符“+”作为根结点,继而确定该根结点的左、右子树结点的表达式,再在对应的范围内寻找运算级别最低的运算符作为子树的根结点,直到范围内无运算符,则剩余的变量或数为表达式树的叶子。
1 在表达式的左右界范围内寻找运算级别最低的运算符,同时判断运算符两旁有否参与运算的变量或数。若无,则输入表达式不合法;若有,作为当前子树的根结点,设置左子树指针及其左右界值,设置右子树指针及其左右界值。
2 若表达式在左右界范围内无运算符,则为叶子结点,判断变量名或数是否合法。