#include <iostream>
#include <cstdio>
using namespace std;
char s[100][20];
int le[100];
/*
方法为构建表达式树:
le[i]表示:第i个元素(数/运算符)统领的子表达式的左端点位置。
a.对于一个数,其自身就是叶节点,所以子树就是其自身,左端点位置为其自身。
b.对于一个运算符,它有对应的左操作数和右操作数,在后缀表达式中一定连续排列。
以/号为例,如果它是第i个组成部分(数/运算符),它所在后缀表达式带领的表达式树结构为:
(下方指出索引位置)
{左操作数表达式} {右操作数表达式} /
↑ ↑ ↑ ↑ ↑
le[i] le[i-1]-1 le[i-1] i-1 i
右表达式子树的根在“/”左边相邻,位置索引就是i-1
左表达式子树的根位置,在右表达式的左端点的左边相邻,就是le[i-1]-1
*/
bool isop(char *c)/*判断是否为运算符*/
{
return ((c[0]=='*')||(c[0]=='/')||(c[0]=='+')||(c[0]=='-'));
}
void output(int i)/*递归地输出i统领的表达式*/
{
if(isop(s[i]))//i元素是否为操作符
{
printf("%s ",s[i]);//先输出运算符
output(le[i-1]-1);//再输出左表达式
output(i-1);//再输出右表
【C++】后缀表达式转前/中缀表达式 答案(分析构造表达式树的方法)
最新推荐文章于 2024-07-26 13:01:05 发布
本文介绍了如何使用C++编程将后缀表达式转换为前缀和中缀表达式。通过构建表达式树,解析并操作后缀表达式,详细阐述了算法的实现步骤和思路。
摘要由CSDN通过智能技术生成