我正在处理将打印出trie中包含的单词的代码,并记下单词出现的次数。我认为最有效的方法是在将单词添加到trie时将字母存储在相关节点的元素中。出现次数基本上是表示单词结束的标志,如果是单词的最后一个字母(表示单词计数),则会增加。
我在这一点上的斗争是如何让循环检查节点的所有子节点,而不是像现在一样直线,但我无法看到它是如何工作的。想法?
struct Node{
char letter;
struct Node children[26];
int occurences;
};
printTrie(struct node root){
int i = 1;
while(root[i] != NULL){
fprint(root.letter);
printTrie(root->children[]);
}
i++;
}
答案 0 :(得分:0)
您要查找的字词是recursion,以下是您的操作方法:
if(root != NULL) {
printf("%c\n", &root->letter);
printf("%d\n", &root->occurences);
int i;
for (i = 0; i < 26; i++) {
printTrie(root->children[i]); /* <-- Recursion */
}
}
现在,它将首先打印根的值,然后打印每个孩子的值。
如果您希望它在根之前打印每个孩子的值,请将printf
移动到 之后 for-loop