例题:下落的树叶

来源:互联网 发布:云服务器端口8080作用 编辑:程序博客网 时间:2024/04/26 10:57

给一颗二叉树,每个节点都有一个水平位置:左子节点在它左边1个单位,右子节点在右边1个单位。从左向右输出每个垂直位置的所有节点的权值之和。如图所示,从左到右的3个位置权和分别为7,11,3。按照递归(先序)方式输入,用-1表示空树。


Sample Input
5 7 -1 6 -1 -1 3 -1 -1
8 2 9 -1 -1 6 5 -1 -1 12 -1
-1 3 7 -1 -1 -1
-1

 Sample Output

Case 1:
7 11 3

Case 2:
9 7 21 15

#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<string>using namespace std;const int maxn = 100;int sum[maxn];//输入并统计一颗子树,树根水平位置为pvoid 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;int pos = maxn / 2;sum[pos] = v;build(pos - 1);//按照递归(先序)方式输入build(pos + 1);return true;}int main(){int kase = 0;while (init()){int p = 0;while (sum[p] == 0)p++;//找出最左边的叶子cout << "Case " << ++kase << ":\n" << sum[p++];while (sum[p] != 0)cout << " " << sum[p++];}return 0;}


0 0
原创粉丝点击