题目:
题目连接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=640
题意:
给一个先序二叉树,其中左子结点在父节点左一个单位,右节点在父节点右一个单位;
让从左到右输出每个水平位置的权值和;
思路:
定义一个数组来记录答案。根节点对应的那条数值线节点之和存储在数组的终点。
代码:
#include<stdio.h>
#include<string.h>
int tree[100],L,R;
void build(int num,int pos)
{
int x,y;
if (num!=-1)
{
if (pos<L)
L=pos;
if (pos>R)
R=pos;
tree[pos]+=num;
scanf("%d",&x);
build(x,pos-1);
scanf("%d",&y);
build(y,pos+1);
}
}
int main()
{
int i,n,sum=0;
while (scanf("%d",&n)&&n!=-1)
{
memset(tree,0,sizeof(tree));
sum++;
L=50;
R=50;
build(n,50);
printf("Case %d:\n",sum);
for (i=L;i<R;i++)
printf("%d ", tree[i]);
printf("%d\n\n",tree[R]);
}
return 0;
}