这道题目我们无需建树后跑后序遍历 可以直接利用每一个操作符之前的两个操作数进行计算 然后压栈最后不断计算直到栈中只有一个操作数即为答案~
class Solution {
public:
int evalRPN(vector<string>& s) {
stack<int>p;
for(int i=0;i<s.size();i++){
if(isdigit(s[i][0])||(s[i][0]=='-'&&s[i].size()>1)){
if(s[i][0]=='-'){
int tep=0,j=1;
while(j<s[i].size()&&isdigit(s[i][j])){
tep=tep*10+s[i][j++]-'0';
}
tep*=-1;
p.push(tep);
}
else{
int tep=0,j=0;
while(j<s[i].size()&&isdigit(s[i][j])){
tep=tep*10+s[i][j++]-'0';
}
p.push(tep);
}
}
else {
char c=s[i][0];
auto b=p.top();p.pop();
auto a=p.top();p.pop();
if(c=='*')p.push(a*b);
else if(c=='+')p.push(a+b);
else if(c=='-')p.push(a-b);
else p.push(a/b);
}
}
return p.top();
}
};