输入的第一行数字,是该满二叉树的叶子节点。
接下来m行是查找叶子节点的数值的,0 向左走, 1 向右走。
用数组来表示二叉树。根节点为k,左孩子为2*k + 1,右孩子为2*k + 2。
代码:
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
char str[8][5];
int num[300], ans[150];
int n, m;
int main()
{
// freopen("1.txt", "r", stdin);
int i, t = 0;
char c[150];
while(cin >> n)
{
if(n == 0)
break;
for(i = 0; i < n; i++)
cin >> str[i];
cin >> c;
int len = strlen(c), index = 0;
memset(num, 0, sizeof(num));
for(i = 0; i < n; i++) //空出index个位置,前面index个位置不是叶子结点
index += (int)pow(2, i);
for(i = 0; i < len; i++)
num[i + index] = c[i] - '0';
cin >> m;
for(i = 0; i < m; i++)
{
cin >> c;
int l = strlen(c), k = 0;
for(int j = 0; j < l; j++)
{
if(c[j] == '1')
k = 2 * k + 2;
else
k = 2 * k + 1;
}
ans[i] = num[k];
}
cout << "S-Tree #" << ++t << ":" << endl;
for(i = 0; i < m; i++)
cout << ans[i];
cout << "\n\n";
}
return 0;
}