程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 數據結構 uva-699-The Falling Leaves

數據結構 uva-699-The Falling Leaves

編輯:C++入門知識

題目意思:   給一顆二叉樹,讓你按左到右的順序,輸出同一水平位置的所有節點的值的總和。       解題思路:   用遞歸建樹,在建樹的過程中就把每一水平位置上的總和求出來。在這裡我把樹根的位置記為150,然後左孩子的位置   就為直系父親位置減1,右孩子為直系父親位置加1.       代碼:   [cpp]  #include<iostream>   #include<cmath>   #include<cstdio>   #include<cstdlib>   #include<string>   #include<cstring>   #include<algorithm>   #include<vector>   #include<map>   #include<stack>   #include<queue>   #define eps 1e-6   #define INF (1<<20)   #define PI acos(-1.0)   using namespace std;      int ans[330];      void tree(int cur,int loc)   {       if(cur==-1)  //遇到葉子節點,則返回           return ;       ans[loc]+=cur; //否則在該位置上加上該值          int left,right;          scanf("%d",&left);       tree(left,loc-1);  //左孩子,位置為父親的位置減1          scanf("%d",&right);       tree(right,loc+1);  //右孩子,位置為父親的位置加1          return ;   }         int main()   {       int cur,ca=0;          while(scanf("%d",&cur)&&cur!=-1)       {              memset(ans,0,sizeof(ans));           tree(cur,150);  //將150置為初始位置              int i;              for(i=1;i<=300;i++)  //去掉前面的0               if(ans[i])                   break;           if(i==301)               continue;           printf("Case %d:\n%d",++ca,ans[i]);           for(++i;i<=300;i++)  //輸出不為0的和值               if(ans[i])                   printf(" %d",ans[i]);           printf("\n\n");          }          return 0;   }      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved