UVA699 The Falling Leaves

    xiaoxiao2021-03-25  255

    描述

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

    题解

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

    代码

    #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; }
    转载请注明原文地址: https://ju.6miu.com/read-7354.html

    最新回复(0)