Заполнение trie без проблем. Слова не содержат чисел или пробелов и только строчные буквы.Печать слов в trie в C
printTrieContents использует буфер, размещенный в основном.
ПРОБЛЕМА: , если в три содержит слова «баллы» и «что-то», «баллы» будут напечатаны, а «что-то» не будет.
Все остальное в порядке.
struct trieNode {
int count;
struct trieNode *children[ALPHA_SIZE];
};
void printTrieContents(struct trieNode *root, char *buffer, int buffIndex){
int i;
for(i = 0; i < ALPHA_SIZE; i++){
if(root->children[i] != NULL){
buffer[buffIndex] = i + 'a';
printTrieContents(root->children[i], buffer, buffIndex + 1);
}
if(!hasChildren(root)){
buffer[buffIndex] = '\0';
if(strlen(buffer) > 0){
printf("%s: %d\n", buffer, root->count);
buffIndex = 0;
}
}
}
}
int hasChildren(struct trieNode *root){
int i;
for(i = 0; i < ALPHA_SIZE; i++){
if(root->children[i] != NULL){
return 1;
}
}
return 0;
}
Это не связано с вопросом, но вам нужен дополнительный бит в узле, иначе вы не узнаете, является ли префикс слова также словом. Например: {"a", "at", "atrium"}. –