UVa 699 The Falling Leaves(递归建树)

Posted Amysear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 699 The Falling Leaves(递归建树)相关的知识,希望对你有一定的参考价值。

UVa 699 The Falling Leaves(递归建树)

  假设一棵二叉树也会落叶  而且叶子只会垂直下落   每个节点保存的值为那个节点上的叶子数   求所有叶子全部下落后   地面从左到右每堆有多少片叶子

  和UVa 839 -- Not so Mobile(树的递归输入)有点像  都是递归输入的  一个节点(设水平位置为p)  则它的左右儿子节点的水平位置分别为  p-1  p+1   也是可以边输入边处理的  输入完也就得到答案了   注意每个样例后面都有一个空行  包括最后一个

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int maxn = 205;
 5 int sum[maxn];
 6 void build(int p)
 7 {
 8     int v;
 9     cin>>v;
10     if(v == -1) return;
11     sum[p] += v;
12     build(p-1);build(p+1);
13 }
14 
15 bool init()
16 {
17     int v;
18     cin>>v;
19     if(v == -1) return false;
20     memset(sum,0,sizeof(sum));
21     sum[maxn/2] += v;
22     build(maxn/2-1);build(maxn/2+1);
23     return true;
24 }
25 
26 int main()
27 {
28     int kase = 0;
29     while(init())
30     {
31         int p=0;
32         while(sum[p] == 0) p++;
33         cout<<"Case "<<++kase<<":"<<endl;
34         for(int i=p;;i++)
35         {
36             if(sum[i] == 0)
37             {
38                 cout<<endl<<endl;break;
39             }
40             if(i!=p) cout<<" ";
41             cout<<sum[i];
42         }
43     }
44     return 0;
45 }

 

以上是关于UVa 699 The Falling Leaves(递归建树)的主要内容,如果未能解决你的问题,请参考以下文章

UVA699 UVALive5471 The Falling Leaves树权和

下落的树叶 (The Falling Leaves UVA - 699)

The Falling Leaves UVA - 699

UVa 699 The Falling Leaves(递归建树)

Uva 699The Falling Leaves

UVa699 - The Falling Leaves