1. 程式人生 > >UVa 699 The Falling Leaves(遞歸建樹)

UVa 699 The Falling Leaves(遞歸建樹)

page 得到 break case 也會 slist 註意 stream pan

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(遞歸建樹)