树构建错了。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
char s[100005];
int son[100005][2],ans[100005];
int stk1[100005],stk2[100005];
int top1,top2;
void build()
{
int x=stk1[top1--];
son[x][0]=stk2[top2-1];
son[x][1]=stk2[top2];
stk2[--top2]=x;
}
void dfs(int x)
{
if(isdigit(s[x])) return;
dfs(son[x][0]),dfs(son[x][1]);
if(s[x]=='+') ans[x]=ans[son[x][0]]+ans[son[x][1]];
if(s[x]=='*') ans[x]=ans[son[x][0]]*ans[son[x][1]];
}
void print(int x)
{
cout<<s[x]<<' '<<son[x][0]<<' '<<son[x][1]<<'\n';
print(son[x][0]);
print(son[x][1]);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin>>(s+1);
int n=strlen(s+1);
s[0]='(',s[n+1]=')';
for(int i=0;i<=n+1;i++)
{
if(s[i]=='+')
{
if(s[stk1[top1]]=='*') build();
stk1[++top1]=i;
}
if(s[i]=='*')
{
if(s[stk1[top1]]=='*') build();
stk1[++top1]=i;
}
if(s[i]=='(') stk1[++top1]=i;
if(s[i]==')')
{
if(s[stk1[top1]]=='*') build();
if(s[stk1[top1]]=='+') build();
top1--;
}
}
// print(stk2[1]);
// return 0;
dfs(stk2[1]);
cout<<ans[stk2[1]]<<'\n';
return 0;
}