https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=640

给一颗二叉树,每个结点都有一个水平位置,左子节点在它左边一个单位,右子节点在右边一个单位。从左向右输出每个水平位置的所有结点的权值之和。

一开始还建了树,后来发现建了树也啥用。哎,到现在为止,我的递归思想还是太弱了。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 int sum[1000];
 6 
 7 void init(int pos)
 8 {
 9     int x;
10     cin >> x;
11     if (x == -1)  return;
12     sum[pos] += x;
13     init(pos - 1);
14     init(pos + 1);
15 }
16 
17 int main()
18 {
19     int t;
20     int count = 0;
21     while (cin >> t&&t != -1)
22     {
23         memset(sum, 0, sizeof(sum));
24         sum[500] = t;
25         init(500-1);
26         init(500 + 1);
27         int i = 0;
28         while (sum[i] == 0)  i++;
29         int p = 500;
30         while (sum[p] != 0)   p++;
31         cout << "Case " << ++count << ":" << endl;
32         for (int k = i; k < p-1; k++)
33         {
34             cout << sum[k] << " ";
35         }
36         cout << sum[p-1] << endl<<endl;
37     }
38     return 0;
39 }

2016-12-02  15:36:33