题目地址:点击打开链接
C++代码:
#include <iostream>
#include <vector>
#include <string>
#include <deque>
#include <cmath>
using namespace std;
struct Tree
{
string data;
Tree *left,*right;
};
int main()
{
int n;
int cas=1;
while(cin>>n&&n!=0)
{
vector<string> vs;
int i;
for(i=0;i<n;++i)
{
string s;
cin>>s;
vs.push_back(s);
}
string leaves;
cin>>leaves;
deque<Tree*> dt;
Tree *root=new Tree;
root->data=vs[0];
int l=1;
dt.push_back(root);
while(!dt.empty()&&l<=n)
{
int num=(int)pow(2,l-1);
for(i=0;i<num;++i)
{
Tree *p=dt.front();
dt.pop_front();
p->data=vs[l-1];
p->left=new Tree;
p->right=new Tree;
dt.push_back(p->left);
dt.push_back(p->right);
}
++l;
}
l=0;
while(!dt.empty())
{
Tree *p=dt.front();
dt.pop_front();
p->data=leaves[l];
p->left=p->right=NULL;
++l;
}
int m;
cin>>m;
string path;
vector<int> vi;
for(i=0;i<m;++i)
{
cin>>path;
int l=1;
Tree *p=root;
while (l<=n)
{
if(path[p->data[1]-'1']=='1')
p=p->right;
else
p=p->left;
++l;
}
vi.push_back(p->data[0]-'0');
}
cout<<"S-Tree #"<<cas++<<":"<<endl;
for(i=0;i<m;++i)
cout<<vi[i];
cout<<endl<<endl;;
}
return 0;
}