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