分析:
从数组中间(根节点对应位置)开始向两边递归,即和二叉树先序遍历建树一样,遇见-1则为空子树return。
很好的递归练习题。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int sum[maxn];
bool solve(int pos) {
int v; cin >> v;
if(v==-1) return false;//空树
sum[pos] += v;
solve(pos-1); solve(pos+1);
return true;
}
int main() {
freopen("i.txt","r",stdin);
freopen("o.txt","w",stdout);
int rnd = 1,i = 0;
while(true) {
if(!solve(maxn/2)) break;
i = 0;
while(!sum[i]) i++;
cout << "Case " << rnd++ << ":\n" << sum[i]; i++;
while(sum[i]) { cout << " " << sum[i]; i++; }
cout << "\n\n";
memset(sum, 0, sizeof(sum));
}
}