根据给出的先序遍历顺序边构造树边统计树叶之和,根节点在大数组中间索引处开始,左右树依次向两边展开。
#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; }