The Falling Leaves UVA - 699
阿新 • • 發佈:2019-02-05
子節點 ase cin fall tdi mes 所有 out eof
題目鏈接:https://vjudge.net/problem/UVA-699
題目大意:給一顆二叉樹,每個結點都有一個水平位置 :左子節點在它左邊的1個單位,右子結點在它右邊1個單位。從左向右輸出每個水平位置的所有結點的權值之和。
思路:用sum[i]表示第i個水平位置的總和 。 其實這題並不難 但是因為剛剛學數據結構 二叉樹並不熟悉 所以也列出來
看代碼:
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; const int maxn=1e6+5; int sum[maxn]; 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; memset(sum,0,sizeof(sum)); int pos=maxn/2; sum[pos]=v; build(pos-1); build(pos+1); return true ; } int main() { int ca=0; while(init()) { int p=0; while(sum[p]==0) p++;//找到最左邊的葉子 //cout<<"Case "<<++ca<<":"<<endl; printf("Case %d:\n",++ca); cout<<sum[p++]; while(sum[p]!=0) cout<<" "<<sum[p++]; cout<<endl<<endl; } return 0; }
The Falling Leaves UVA - 699