前言
前中后缀表达式的基本介绍可见文章:前中转后缀,本文不再赘述。
本文将实现将前缀、后缀表达式转变为中缀表达式。约定放置表达式的基本数据结构依然如下所示:
1 | enum OperType |
注:本文所指表达式操作符只含有双目运算符且运算符的结合顺序为从左到右。
前缀转中缀表达式
前缀表达式不包含括号却表达了正确的运算顺序,因此在转成中缀表达式时将会完全丢失这些信息。由于前缀表达式在第一次访问时输出,而中缀在第二次访问时输出,因此我么可以仿照前缀转后缀代码来实现前缀转中缀,基本实现代码如下:
1 |
|
前缀转中缀代码测试
使用如下图所示表达式树生成的前缀表达式来进行测试:图片来源
1 |
|
后缀转中缀表达式
参考后缀转前缀代码,后缀是在第三次访问时输出,而中缀是在第二次访问时输出,同时考虑后缀因该从后往前的扫描,,因此采用栈存放操作数操作符以及根访问次数。只需将后缀转前缀代码稍加修改即可,具体代码如下所示:
1 |
|
后缀转中缀代码测试
使用前缀中的表达式树,同时使用括号改变优先级,具体测试代码如下:
1 |
|