[英]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.