【发布时间】:2017-04-17 10:20:05
【问题描述】:
我需要打印轮胎树的所有后缀。我正在使用以下遍历方法打印所有后缀。
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
据我了解,问题的根本原因是没有正确更新前缀变量。如何解决这个问题?
【问题讨论】:
-
我认为
prefix需要重置或使用复制。 -
是的,我觉得使用副本就可以了。我该怎么做?
-
Paul Ogilvie 已经提出了制作副本的建议。为了重置,记住
prefix的结尾并告诉concatenate_string加入的地方。 -
如
void traverse(char prefix[], struct TrieNode *root, int depth) { prefix[depth] = root->label; prefix[depth+1] = 0;...traverse(prefix, root->children[i], depth+1);