比赛 |
板子大赛 |
评测结果 |
AAAAAAAAAA |
题目名称 |
表达式树 |
最终得分 |
100 |
用户昵称 |
xxz |
运行时间 |
0.030 s |
代码语言 |
C++ |
内存使用 |
3.41 MiB |
提交时间 |
2025-01-22 09:29:29 |
显示代码纯文本
#include<iostream>
using namespace std;
struct nod{
int lch,rch,val,par;
}tre[2049];
int n;
int f(int x){
if(x<=n) return tre[x].val;
else{
if(tre[x].val==-1) return f(tre[x].lch)+f(tre[x].rch);
else if(tre[x].val==-2) return f(tre[x].lch)-f(tre[x].rch);
else if(tre[x].val==-3) return f(tre[x].lch)*f(tre[x].rch);
else if(tre[x].val==-4) return f(tre[x].lch)/f(tre[x].rch);
}
}
int main(){
freopen("expr_tree.in","r",stdin);
freopen("expr_tree.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) cin>>tre[i].val;
for(int i=n+1;i<=n*2-1;i++){
char q;cin>>q;
if(q=='+') tre[i].val=-1;
else if(q=='-') tre[i].val=-2;
else if(q=='*') tre[i].val=-3;
else if(q=='/') tre[i].val=-4;
cin>>tre[i].lch>>tre[i].rch;
tre[tre[i].lch].par=i;
tre[tre[i].rch].par=i;
}
int rt=1;
while(tre[rt].par) rt=tre[rt].par;
cout<<f(rt);
fclose(stdin);
fclose(stdout);
return 0;
}