在 C 中打印一个 Trie
Printing out a Trie in C
几乎完成打印此试用版。不过运行进去有点麻烦。我目前有:
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" 在我的 trie 中,这将打印出 "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
增加了,但没有减少,这意味着它为每个child累加。以下更改应该会按预期工作。
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);
}
}
几乎完成打印此试用版。不过运行进去有点麻烦。我目前有:
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" 在我的 trie 中,这将打印出 "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
增加了,但没有减少,这意味着它为每个child累加。以下更改应该会按预期工作。
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);
}
}