Tiers树打印所有后缀提供错误输出

时间:2017-04-17 10:20:06

标签: c algorithm trie

我需要打印轮胎树的所有后缀。我正在使用以下遍历方法来打印所有后缀。

struct TrieNode {
    struct TrieNode *children[ALPHABET_SIZE];
    char label;
    bool isLeaf;
};

void traverse(char prefix[], struct TrieNode *root) {
    concatenate_string(prefix, &(root->label));
    if (root->isLeaf) {
        printf("%s\n", prefix);
    }

    for (int i = 0; i < 26; i++) {
        if (root->children[i]) {
            traverse(prefix, root->children[i]);
        }
    }
}

考虑遵循Trie树

    Root
 |     |    |
 L     M    N
|  |
a  b 

所以我的预期输出是

La
Lb
M
N

但我的代码打印

  La
  Lab
  LabM
  LabMN

根据我的理解,问题的根本原因是没有正确更新前缀变量。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

那是因为你继续连接。最好将char prefix[]作为局部变量,例如:

void traverse(char prefix[], struct TrieNode *root)
{
    char newprefix[30];
    strcpy(newprefix, prefix);
    concatenate_string(newprefix, &(root->label));
    if (root->isLeaf) {
        printf("%s\n",newprefix);
    }

    for(int i=0 ; i< 26 ; i++){
        if(root->children[i]){
            traverse(newprefix, root->children[i]);
        }
    }
}

并打电话:

traverse("", root);