#include<stdio.h>
#define HASHSIZE 20000
typedef struct TreeNode
{
int val;
int pos;
struct TreeNode* left;
struct TreeNode* right;
}Node;
int arr[HASHSIZE];
int hashmap[HASHSIZE];
int ans[HASHSIZE];
void preorder(Node* rt)
{
if(rt == NULL) return;
printf("%d ", rt->pos);
preorder(rt->left);
preorder(rt->right);
}
Node* buildtree(int* cur, int p)
{
if(arr[*cur] == -1)
{
(*cur)++;
return NULL;
}
Node* newnode = (Node*)malloc(sizeof(Node));
newnode->val = arr[*cur];
newnode->pos = p;
hashmap[newnode->pos] += newnode->val;
(*cur)++;
newnode->left = buildtree(cur, p-1);
newnode->right = buildtree(cur, p+1);
return newnode;
}
void ReadInput()
{
int i, leaf, nonleaf;
int num = 1;
while(1)
{
i = 0, leaf = 0, nonleaf = 0;
memset(ans, 0, sizeof(ans));
memset(hashmap, 0, sizeof(hashmap));
do
{
scanf("%d", &arr[i]);
if(arr[i] == -1) leaf++;
else nonleaf++;
i++;
}while((nonleaf+1) != leaf);
if(leaf == 1) break;
int c = 0;
Node* root = buildtree(&c, HASHSIZE/2);
int j = 0, k = 0;
for(j = 0; j < HASHSIZE; j++)
if(hashmap[j]) ans[k++] = hashmap[j];
printf("Case %d:\n", num++);
for(j = 0; j < k; j++)
{
if(j != k - 1)
printf("%d ", ans[j]);
else
printf("%d", ans[j]);
}
printf("\n\n");
}
}
int main()
{
ReadInput();
return 0;
}
UVa 699 Falling Leaves
最新推荐文章于 2020-02-24 12:45:19 发布