标签:blog io os sp for 数据 2014 log bs
题目:给你一棵二叉树,每个节点上有一些叶子,每个节点的左右子树的根节点分别在左右相邻位置;
现在所有叶子都垂直落下,问每一堆各有多少叶子。
分析:数据结构,递推。树的遍历。
首先,利用一个数组记录每堆的数量,从500位置开始作为根的位置;
然后,用树的先根序遍历读取数据统计,记录左右边界,查询输出即可。
说明:(⊙_⊙)每组数据后有一个空行,╮(╯▽╰)╭。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int sum[1001],L,R; int tree(int s, int leaf) { scanf("%d",&leaf); if (leaf != -1) { sum[s] += leaf; if (s < L) L = s; if (s > R) R = s; tree(s-1, 0); tree(s+1, 0); } return leaf; } int main() { int T = 1; while (tree(L = R = 500, 0) != -1) { printf("Case %d:\n%d",T ++,sum[L]); for (int i = L+1 ; i <= R ; ++ i) printf(" %d",sum[i]); printf("\n\n"); memset(sum, 0, sizeof(sum)); } return 0; }
标签:blog io os sp for 数据 2014 log bs
原文地址:http://blog.csdn.net/mobius_strip/article/details/41939927