uva 699 The Falling Leaves(建二叉树同一时候求和)
Posted mthoutai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva 699 The Falling Leaves(建二叉树同一时候求和)相关的知识,希望对你有一定的参考价值。
本来看着挺难的。大概是由于我多瞟了一眼题解,瞬间认为简单多了。做题就得这样,多自己想想。如今是
多校联赛,然而我并不会做。
。。
。慢慢来,一直在努力。
分析:
题上说了做多不会超过80行。所以能够开一个数组。这里我是把根节点作为第42个数,能够在建树的同一时候求
出那一列全部数值的和左孩子节点减一,右孩子节点加一。。
。写的时候中间出了点小bug,忘了给flag重置0了,调
了好久。。
。
第一次提交wa了,由于没有换行,题目要求结果之间有一行空行的。
。
。
贴代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<limits.h> int cnt[100]; int flag,m; int min,max; typedef struct Tnode { int data; struct Tnode *lchild; struct Tnode *rchild; }*node; void creattree(node &T,int n) { int x; if(flag) { x = m; flag=0; } else scanf("%d",&x); if(x == -1) { T = NULL; return ; } else { cnt[n] += x; T = (node)malloc(sizeof(Tnode)); T->lchild = NULL; T->rchild = NULL; T->data = x; } creattree(T->lchild, n-1); creattree(T->rchild, n+1); if(n < min) min = n; if(n > max) max = n; return ; } int main() { int i; int ans = 0; while(scanf("%d",&m)&&m!=-1) { ans++; min = INT_MAX; max = 0; flag = 1; memset(cnt, 0, sizeof(cnt)); node T; creattree(T,42); printf("Case %d:\n",ans); for(i=min; i<=max; i++) { printf("%d",cnt[i]); if(i!=max) printf(" "); } puts(""); puts(""); //flag = 0; } return 0; }
以上是关于uva 699 The Falling Leaves(建二叉树同一时候求和)的主要内容,如果未能解决你的问题,请参考以下文章
UVA699 UVALive5471 The Falling Leaves树权和
下落的树叶 (The Falling Leaves UVA - 699)