#include#include using namespace std;const int maxn = 100;int sum[maxn];//输入并统计一颗子树,树根水平位置为 p void build (int p){ int v; cin >> v; if (v == -1) return; //空树 sum[p] += v; build(p - 1); build(p + 1);}bool init(){ int v; cin >> v; if (v == -1) return false; //先序遍历输入,第一个数据就是树根,如果第一个数据为 -1,说明整个树都为空 memset(sum, 0, sizeof(sum)); int pos = maxn / 2; sum[pos] = v; build (pos - 1); build (pos + 1); // biild的参数,为权值累加的位置,在数组中的下标 }int main(){ int kase = 0; while (init()) { int p = 0; while (sum[p] == 0) p++; //找最左边的叶子 cout << "Case " << ++kase << ":" << endl << sum[p++]; // 因为要避免行末输出多余的空格 while (sum[p] != 0) cout << " " << sum[p++]; cout << endl << endl; //Follow the output for each case by a blank line,注意是 each case!! } return 0;}