1. 程式人生 > >The Falling Leaves UVA - 699

The Falling Leaves UVA - 699

子節點 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