题目有点长,但是思路很简单,找出每次的路径2进制序列然后在叶子里找到对应的0或1值即可。
#include<stdio.h> #include<stdlib.h> #include<math.h> int orders[10]; char leaves[200]; int num=1; int main() { int n; char str[10]; while (scanf("%d", &n) != EOF) { if (n == 0) break; printf("S-Tree #%d:\n",num++); int i; for (i = 0; i < n; i++) { scanf("%s", str); orders[i] = atoi(str + 1); } scanf("%s", leaves); int m; scanf("%d", &m); char vva[10]; for (i = 0; i < m; i++) { scanf("%s", vva); int j; char binary[10]; for (j = 0; j < n; j++) { binary[j] = vva[orders[j] - 1]; } binary[n] = 0; int idx = 0; int k; for (k = 0; k < n; k++) { if (binary[k] - '0') idx += pow(2, n - 1 - k); } printf("%d", leaves[idx]-'0'); if (i == m - 1) printf("\n\n"); } } return 0; }