根据给出的先序遍历顺序边构造树边统计树叶之和,根节点在大数组中间索引处开始,左右树依次向两边展开。
#include<stdio.h>
#define MAX 1000
int result[MAX];
int cases=1;
void printLeaves() {
printf("Case %d:\n",cases++);
int i;
for (i = 0; i < MAX; i++) {
if (result[i]) {
printf("%d", result[i]);
if (i + 1 < MAX && result[i + 1] != 0)
printf(" ");
}
}
printf("\n\n");
}
int buildTree(int idx) {
int num;
scanf("%d", &num);
if (num == -1)
return 0;
result[idx] += num;
buildTree(idx - 1);
buildTree(idx + 1);
return 1;
}
int main() {
cases=1;
while (1) {
int i;
for (i = 0; i < MAX; i++)
result[i] = 0;
if (!buildTree(MAX / 2))
break;
printLeaves();
}
return 0;
}