uva 699
这个题应该是我在uva上面做的第一个关于二叉树的题,直接一把通过,挺爽的。
思路就是用一个数组,在访问根节点时将数组的下标传为1000,然后每次访问左子树,将下标减去1。访问右子树,将数组下标加上1.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Tnode{
int value;
struct Tnode *left, *right;
}Node;
int fall[2000];
int max=0;
int CreateNode(Node * root,int index){
int input;
scanf("%d",&input);
if(input!=-1){
fall[index]+=input;
if(index>max)
max=index;
root=(Node *)malloc(sizeof(Node));
root->value=input;
root->left=root->right=NULL;
CreateNode(root->left,index-1);
CreateNode(root->right,index+1);
}
if(input==-1 && index==1000)
return 0;
return 1;
}
int main(){
int input,i,j=1,ret;
Node * root;
memset(fall,0,sizeof(fall));
while(ret=(CreateNode(root,1000))!=0){
getchar();
for(i=0;i<max;i++)
if(fall[i]!=0)
break;
printf("Case %d:\n",j);
for(;i<=max;i++)
if(i!=max)
printf("%d ",fall[i]);
else
printf("%d\n\n",fall[i]);
memset(fall,0,sizeof(fall));
j++;
max=0;
}
return 0;
}