题目地址:http://poj.org/problem?id=1056
Description
Input
Output
Sample Input
01 10 0010 0000 9 01 10 010 0000 9
Sample Output
Set 1 is immediately decodable Set 2 is not immediately decodable
Source
#include <stdio.h> #include <stdlib.h> typedef struct btree{ int istail; struct btree * left; struct btree * right; }BTree, *pBTree; char data[11]; BTree * root = NULL; void insert(char data[]){ int i= 0; BTree * p = NULL; if (root == NULL){ root = (BTree *)malloc(sizeof(BTree)); root->istail = 0; root->left = root->right = NULL; } p = root; while (data[i] != '\0'){ if (data[i] == '0'){ if (p->left != NULL){ p = p->left; } else{ p->left = (BTree *)malloc(sizeof(BTree)); p = p->left; p->istail = 0; p->left = p->right = NULL; } } else{ if (p->right != NULL){ p = p->right; } else { p->right = (BTree *)malloc(sizeof(BTree)); p = p->right; p->istail = 0; p->left = p->right = NULL; } } ++i; } p->istail = 1; } int isImmediately(BTree * root){ BTree * p = root; while (p != NULL){ if (p->istail == 1 && (p->left != NULL || p->right != NULL)) return 0; else return isImmediately(p->left) && isImmediately(p->right); } return 1; } void destoryBTree(pBTree * root){ if ((*root)->left) destoryBTree(&(*root)->left); if ((*root)->right) destoryBTree(&(*root)->right); free(*root); *root = NULL; } int main(void){ int count = 0; while (gets(data)){ if (data[0] == '9'){ if (isImmediately(root)) printf("Set %d is immediately decodable\n", ++count); else printf("Set %d is not immediately decodable\n", ++count); destoryBTree(&root); } else{ insert(data); } } return 0; }