UVA699 The Falling Leaves

描述

给一棵二叉树,每个节点都有一个水平位置:左儿子在它左边1个单位,右儿子在右边1个单位。从左向右输出每个水平位置的所有结点的权值之和。按照递归方式输入,-1表示空

题解

定义一个数组来记录答案。根节点对应的那条数值线节点之和存储在数组的终点。然后dfs中递归调用,递归出口是遇到空树

代码

#include
#include
#include
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;
}

你可能感兴趣的:(递归)