题目地址: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;
}POJ1056 IMMEDIATE DECODABILITY【数据结构】
原文地址:http://blog.csdn.net/jdplus/article/details/41172437