1、题目描述很长,实际比较简单。我一直觉得二叉树和二进制的关系很微妙。。。其实走的路线完全可以看作是一个二进制数(从高位到低位),算出的值就对应叶子节点的编号。一次AC~
#include <cstdio>
using namespace std;
int main()
{
int n,m,temp,ans,x[8],kase=0;
char s[8][3],leaf[130];
while(scanf("%d",&n)==1&&n){
printf("S-Tree #%d:\n",++kase);
for(int i=1;i<=n;i++)
scanf("%s",s[i]);
scanf("%s",leaf);
scanf("%d",&m);getchar();
for(int i=0;i<m;i++){
for(int j=1;j<=n;j++)
x[j]=getchar()-'0';
getchar();
temp=1<<(n-1);ans=0;
for(int i=1;i<=n;i++){
int cur=s[i][1]-'0';
ans+=temp*x[cur];
temp>>=1;
}
printf("%c",leaf[ans]);
}
printf("\n\n");
}
return 0;
}