逆波兰表达式

逆波兰表达式(后缀表达式)是一种数学计算表达方式,通过将运算符置于操作数之后来表示计算。本文介绍了如何用二叉树表示和转换中缀表达式,并阐述了使用栈进行逆波兰表达式求值的算法。此外,还提及了C++的boost库中的Spirit组件在中缀表达式求值中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逆波兰表达式

首先我们要弄清楚什么是逆波兰表达式?
对于一个我们常见的算式,例如a+b,我们成为这样的算式为中式表达式,而所谓的逆波兰表达式即是后缀表达式。
读到这,你可能还是不懂,什么是逆波兰表达式,那么我们来说说,对于一个常见的算式,我们怎么用一颗二叉树表示,我们尽量把运算符放在根节点
对于a+b来说,其二叉树的表示方法如下:
在这里插入图片描述

所谓逆波兰表达式,就是将这棵树后续遍历得到的结果,即ab+
而对于a+(b-c),其二叉树表示形式为:
在这里插入图片描述
其后续表达式为abc-+
从这不就明白了逆波兰表达式吗?
那么如何进行逆波兰求值呢?首先思路就是利用栈
1.如果当前元素是数字,那么就直接压入栈
2.如果当前元素是运算符,那么一次性弹出两个元素,同时后弹出来的作为加数或者被减数或者乘数或者被除数
在这里插入图片描述
根据上面的思路,我们可这么些:

class Solution {
   
   
public:
    int evalRPN(vector<string>& tokens) {
   
   
		stack<string> s;
		for(const auto& token:tokens){
   
   
			if(token == "+"){
   
   
				int num1 = atoi(s.top().c_str());
				s.pop();
				int num2 = atoi(s.top().c_str());
				s.pop();
				s.push(to_string(num2 + num1));
			}
			else if(token == "-"){
   
   
				int num1 = atoi(s.top().c_str());
				s.pop();
				int num2 = atoi(s.top().c_str());</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值