这道题用数组模拟二叉树,就可以来。
#include<stdio.h>
#define MAXN 1000
int ord[MAXN];
char s[MAXN],opera[MAXN],a[MAXN];
int ans;
int main()
{
int n,m,T=0;
//freopen("a.txt","r",stdin);
//freopen("b.txt","w",stdout);
while(scanf("%d",&n),n)
{
++T;
char s[3];
for(int i=0;i<n;++i)
{
scanf("%s",s);
ord[i]=s[1]-48;
}
scanf("%s",a);
scanf("%d",&m);
printf("S-Tree #%d:\n",T);
for(int i=0;i<m;++i)
{
scanf("%s",opera);
int ans=0;
for(int i=0;i<n;++i)
{
if(opera[ord[i]-1]-48==1) ans=2*ans+2;
else ans=2*ans+1;
}
printf("%d",a[ans-(2<<(n-1))+1]-48);
}
printf("\n");
printf("\n");
}
//fclose(stdin);
//fclose(stdout);
return 0;
}