題目意思: 給一顆二叉樹,讓你按左到右的順序,輸出同一水平位置的所有節點的值的總和。 解題思路: 用遞歸建樹,在建樹的過程中就把每一水平位置上的總和求出來。在這裡我把樹根的位置記為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; }