我在C中打印出trie
的字词时遇到问题。我已经像这样实现了trie
:
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"
和{{}的插入1}}作为不同的词。
随后,我不确定如何使用DFS将其打印出来,因为DFS不会一直走到"abe"
,打印出来然后再回到{{1}的级别},看到"abc"
有一个尚未访问过的子项,然后将其打印出来,最后导致字符串"b"
?
答案 0 :(得分:3)
打印trie内容的合适方法是使用用户定义的堆栈,该堆栈将字符存储在从根到当前节点的路径中。在每次递归调用时,推送访问过的注释中包含的字符;在离开节点时,将弹出堆栈的顶部。每次递归到达trie的叶子时,将打印整个堆栈。如果在没有用户定义堆栈的情况下使用深度优先搜索,则从根到当前节点的路径仅在调用堆栈中隐式表示,无法直接访问。