繁体   English   中英

用C打印Trie

[英]Printing out a Trie in C

几乎完成了打印此Trie的操作。 但是遇到了一些麻烦。 我目前有:

    void printSubtree(struct trie *subtree, char word[100], int level) {
    int i;

        if (subtree == NULL){
        return;
        }

       if (subtree->wordEnd) {     
            word[level] =0;
            printf( "%s \n ", word);

        }
            for (i = 0; i<26;i++) {    
                if (subtree->children[i]!= NULL) {   
                    word[level] = 97 + i;
                    level++;
                    printSubtree( subtree->children[i], word, level);
            }   
    }           
 }

当我这样做时,它会跳过第一个字母,所以我有另一个包含此代码段的代码,该代码段将打印第一个字母,然后调用printSubtree来打印该相应第一个字母的其余字母。

    for (i = 0; i<26;i++) {
    if (temp->children[i]!= NULL) {
        arr[0] = temp->children[i]->letter;
        printSubtree(temp->children[i], arr, 1);  
        }
    } 

但是,发生的情况是它无法正确打印出Trie。 例如,如果“ bro”和“ brim”在我的特里里,则打印出“ bro”然后是“ brio”,而不是brim。

提前致谢。

据我了解,如果递归是在零件中执行

for (i = 0; i < 26; i++)
{    
    if (subtree->children[i] != NULL)
    {   
        word[level] = 97 + i;
        level++;
        printSubtree(subtree->children[i], word, level);
    }
}

变量level增加了,但从未减少,这意味着它会为每个孩子累积。 以下更改应根据需要进行。

for (i = 0; i < 26; i++)
{    
    if (subtree->children[i] != NULL)
    {   
        word[level] = 97 + i;
        // increment level for the recursive calls
        printSubtree(subtree->children[i], word, level + 1);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM