题目链接:点击打开链接
题意:给出输出二叉树的前序遍历,当 输入值为 -1 时,说明指针为空;若输入二叉树第一个值为-1时,整个文件结束,让你输出二叉树从左到右 每一列的和的值;
思路:构造二叉树,用数组存每一列的值;
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define Max 10010
#define INF 0x3f3f3f3f
struct node
{
int tt;
node *left;
node *right;
node(int k) //对每个新建节点的初始化;
{
tt = k;
left = NULL;
right = NULL;
}
};
int a[Max],left,right,f;
node *build(node *root,int num) //构建二叉树
{
int k;
scanf("%d",&k); // 前序遍历构造二叉树时,直接输入;
if(k==-1)
return NULL;
else
{
node *pp = new node(k); // 新建节点;
a[num]+=k; //存每一列的值
pp->left = build(pp->left,num-1);
pp->right = build(pp->right,num+1);
left = min(left,num); //找出最左最右;
right = max(right,num);
return pp;
}
}
int read()
{
memset(a,0,sizeof(a));
f=0;
left = INF;
right = -INF;
node *root = NULL;
root = build(root,5000);
if(root==NULL) return 0;
else return 1;
}
int main()
{
int i,t=1;
while(read())
{
printf("Case %d:\n",t++);
for(i=left;i<=right;i++)
{
if(i==right) printf("%d\n\n",a[i]);
else printf("%d ",a[i]);
}
}
return 0;
}