【问题标题】:Printing out a Trie in C在 C 中打印出 Trie
【发布时间】:2015-10-21 19:17:37
【问题描述】:

几乎完成了打印此尝试。但是遇到了一点小麻烦。我目前有:

    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);
            }   
    }           
 }

当我这样做时,它会跳过第一个字母,所以我有另一个包含这个 sn-p 的打印第一个字母,然后调用 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。

提前致谢。

【问题讨论】:

    标签: c trie


    【解决方案1】:

    据我了解,如果递归是在部分中执行的

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2012-07-27
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2021-08-18
      相关资源
      最近更新 更多