描述
给一棵二叉树,每个节点都有一个水平位置:左儿子在它左边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