【二叉树】UVa712 - S-Trees

题意

给一棵满二叉树,每一层有一个变量,每个变量都有一个值:0或1。0向左走,1向右走。求到达叶子的值

思路

不用建树,只要模拟左走右走就可以了

总结

建树应该也能做,但是目前对建树有点生疏,不是很会。

在推左走右走的公式时能快一点最好,明明很容易,却找共性找了很久,而且DEBUG了很久,就是因为在存叶子那行数值的时候存的字符型,而不是整型,忘记 - ‘0’,时间都浪费在这里了。

这次一次就过了哦,继续努力,加油。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <stack>
 6 using namespace std;
 7 const int maxn = 10;
 8 int n, m, kase = 0;
 9 
10 int main()
11 {
12    // freopen("in.txt","r",stdin);
13     while(cin >> n && n){
14         cout << "S-Tree #" << ++kase << ":" << endl;
15         int node[maxn];
16         getchar();
17         string s, ter, val;
18         getline(cin,s);
19         int len = s.size();
20         int num = 0;
21         for(int i = 0; i < len; i++)
22             if(isdigit(s[i])) node[num++] = s[i]-'0';
23         cin >> ter >> m;
24         getchar();
25         for(int i = 0; i < m; i++){
26             cin >> val;
27             int cnt = 1;
28             for(int j = 0; j < n; j++){ //模拟
29                 if(val[node[j]-1]-'0' == 1) cnt *= 2; 
30                 else cnt = cnt*2-1;
31             }
32             cout << ter[cnt-1];
33         }
34         cout << endl;
35         cout << endl;
36     }
37     return 0;
38 }

 

posted @ 2016-10-18 17:10  kikii233  阅读(147)  评论(0编辑  收藏  举报