您的位置:首页 > 其它

UVA699

2017-03-08 21:59 120 查看
题目链接:http://www.cnblogs.com/cute/p/3640416.html

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define maxn 10000
int res[maxn];
///这种做法通俗易懂!!!
void dfs(int val,int pos)
{
if (val == -1)
return ;
res[pos] += val;
int left,right;
scanf("%d",&left);
dfs(left,pos - 1);
scanf("%d",&right);
dfs(right,pos + 1);
return ;
}
int main ()
{
int val;
int cas = 0;
while (scanf("%d",&val) && val != -1)
{
memset(res , 0 , sizeof(res));
dfs (val , maxn/2);
printf("Case %d:\n",++cas);
int p=0;
while(res[p]==0)
p++;
cout<<res[p++];
while(res[p]!=0)
cout<<" "<<res[p++];
printf("\n\n");
}
return 0;
}


小记:定义一个数组来记录答案。根节点对应的那条数值线节点之和存储在数组的终点。然后dfs中递归调用,递归出口是遇到空树。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva dfs