【C++】后缀表达式转前/中缀表达式 答案(分析构造表达式树的方法)

本文介绍了如何使用C++编程将后缀表达式转换为前缀和中缀表达式。通过构建表达式树,解析并操作后缀表达式,详细阐述了算法的实现步骤和思路。
摘要由CSDN通过智能技术生成
#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);//再输出右表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值