题目有点长,但是思路很简单,找出每次的路径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;
}
本文详细阐述了如何通过解析输入的路径二进制序列,并定位到叶子节点来获取相应的值,提供了具体的算法实现和实例演示。
135

被折叠的 条评论
为什么被折叠?



