POJ 1105

题意:给出一个深度为n的满二叉树(根节点为0层),每层都有一个变量xi,然后2^n叶子结点被赋值为0,1。然后给出m个给xi赋值的情况,遇到0就朝左孩子走,反之就右孩子,将遍历到的m个叶子结点输出来。

题解:弄清满二叉树中左孩子就是now*2,右孩子为now*2+1,其他就是模拟了。

View Code
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7     int n,ca=0;
 8     while(scanf("%d",&n),n)
 9     {
10         int x[10],y[10];
11         for(int i=1;i<=n;i++)
12         {
13             char s[5];
14             scanf("%s",s);
15             x[i]=s[1]-'0';
16         }
17         char lef[1000],ans[1000];
18         scanf("%s",lef);
19         int m,top=0;
20         scanf("%d",&m);
21         for(int i=0,now;i<m;i++)
22         {
23             char s[10];
24             scanf("%s",s);
25             for(int j=0;s[j]!='\0';j++)
26                 y[j+1]=s[j]-'0';
27             now=1;
28             for(int j=1;j<=n;j++)
29             {
30                 if(y[x[j]]==0)
31                     now*=2;
32                 else
33                     now=now*2+1;
34             }
35             ans[top++]=lef[now-(1<<n)];
36         }
37         ans[top++]='\0';
38         printf("S-Tree #%d:\n%s\n\n",++ca,ans);
39     }
40     return 0;
41 }

转载于:https://www.cnblogs.com/tmeteorj/archive/2012/10/19/2730862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值