例题:下落的树叶
2016-09-24 22:31
113 查看
给一颗二叉树,每个节点都有一个水平位置:左子节点在它左边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
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]; //输入并统计一颗子树,树根水平位置为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; 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; }
相关文章推荐
- UVA699-例题6-10 下落的树叶(The Falling Leaves,UVa 699)
- 例题6-10 下落的树叶(The Falling Leaves, UVa 699)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 例题6-10 下落的树叶 UVa 699
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)
- 算法竞赛入门经典 下落的树叶
- UVA 699 下落的树叶 (p159, 二叉树的 DFS)
- 下落的树叶
- 例题6-6 小球下落(Dropping Balls, UVa 679)
- 6_10 下落的树叶(UVa699)<二叉树的DFS>
- 算法——递归篇——树叶下落问题
- 例题 6-6 小球下落(Dropping Balls) UVa 679 二叉树规律
- UVa 699 下落的树叶
- The Falling Leaves 下落的树叶 UVA 699(二叉树)