逆波兰表达式
首先我们要弄清楚什么是逆波兰表达式?
对于一个我们常见的算式,例如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());</