Trie Printing in C

时间:2015-10-20 08:07:28

标签: c trie

我在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"

1 个答案:

答案 0 :(得分:3)

打印trie内容的合适方法是使用用户定义的堆栈,该堆栈将字符存储在从根到当前节点的路径中。在每次递归调用时,推送访问过的注释中包含的字符;在离开节点时,将弹出堆栈的顶部。每次递归到达trie的叶子时,将打印整个堆栈。如果在没有用户定义堆栈的情况下使用深度优先搜索,则从根到当前节点的路径仅在调用堆栈中隐式表示,无法直接访问。