У меня возникли проблемы распечатывания слова из trie
в C. Я реализовал trie
так:Trie Печать в C
struct trie {
struct trie *children[26];
char letter;
int wordEnd;
};
void printSubtree(struct trie *subtree) {
int i;
if (subtree == NULL){
return;
}
else {
for (i = 0; i<26;i++) {
if (subtree->children[i]!= NULL) {
printf("%c", subtree->children[i]->letter);
printSubtree(subtree->children[i]);
}
}
}
}
void printResult(){
struct trie *temp;
temp = master;
int i ;
if (temp){
for (i = 0; i<26;i++) {
if (temp->children[i]!= NULL) {
printf("%c", temp->children[i]->letter);
printSubtree(temp->children[i]);
printf("\n");
printf("\n");
}
}
}
}
Я знаю, что это не правильно, но я не конечно, как использовать рекурсию для печати слов. Если trie
имеет "abc"
и "abe"
, хранящиеся как отдельные слова, то заканчивается печать только строка "abce"
, вставка как "abc"
, так и "abe"
в виде разных слов. Впоследствии я не уверен, как использовать DFS для его распечатки, потому что не будет DFS до конца до "abc"
, распечатайте это, а затем вернитесь на уровень "b"
, см., Что "b"
имеет детей, которые не имеют и затем распечатать его, в результате чего строка "abce"
в любом случае?
Возможно, вам нужно сохранить целую строку, которая представляет слово до сих пор и к которому вы добавляете буквы, когда вы спускаетесь на три. Когда вы найдете слово, напечатайте эту строку. Вы не можете просто печатать буквы по мере их поступления, потому что они будут печататься только один раз, но могут принадлежать нескольким словам. –