UVa 699 The Falling Leaves

时间:2021-12-11 21:44:43

题意:给出按先序输入的一颗二叉树,分别求出从左到右的相同横坐标上的节点的权值之和

递归建树,然后用sum数组分别统计每一个横坐标上的权值之和

感觉建树都在递归递归递归= =慢慢理解吧

UVa 699 The  Falling Leaves

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<algorithm>
using namespace std; typedef long long LL;
const int maxn=;
int sum[maxn]; void build(int p){
int v;
cin>>v;
if(v==-) return;
sum[p]+=v;
build(p-);//建左子树
build(p+);//建右子树
} bool init(){
int v;
cin>>v;
if(v==-) return false;
memset(sum,,sizeof(sum));
int pos=maxn/;
sum[pos]=v;
// printf("init被调用\n");
build(pos-);build(pos+);
} int main()
{
int kase=;
while(init()){
int p=;
while(sum[p]==) p++;
cout<<"Case "<<++kase<<":\n"<<sum[p++];
while(sum[p]!=) cout<<" "<<sum[p++];
cout<<"\n\n";
}
return ;
}

go---go--go