我正在使用trie在字典中使用c
中的以下结构 struct trie_node {
int is_end; //0 is is not the end of the word ,otherwise 1
char c;
struct trie_node* child[26];
};
我可以插入单词,搜索单词,我想打印字典中的所有单词。不知道如何处理它。我正在尝试打印
void print(struct trie_node node) {
int i = 0;
for (i = 0; i < 26; i++) {
if (node->child[i] != NULL) {
printf("%c", node->child[i]->c);
print(node->child[i]);
}
}
}
但是打印不正确 如果例如我有话 啤酒 蜜蜂 熊 兽
是打印 bearster 它应该打印 bearbeastbeebeer如何正确打印单词列表?
答案 0 :(得分:2)
您需要跟踪路径(从根到当前节点的路径)。当您到达结束节点(is_end为true)时,您将打印作为字典单词的路径。
一种方法是使用char
数组并跟踪其长度,以便了解需要打印的元素数量。请参阅以下代码:
void print_path (char *path, int len){
int i;
for(i = 0; i < len; i++)
printf("%c", path[i]);
}
void print(struct trie_node* node, char *path, int len) {
// sanity check
if (! node)
return;
// current node is part of the current path, so add it
path[len++] = node->c;
// if it is an end node then print the path
if (node->is_end)
print_path(path, len);
// now go through the children and recursive call
int i = 0;
for (i = 0; i < 26; i++) {
if (node->child[i] != NULL) {
print(node->child[i], path, len);
}
}
}
int main(){
// proper allocation for the trie
// ...
// calling the print, assuming the height of tree is at most 128
char path[128];
print(b, path, 0);
}
答案 1 :(得分:0)
你可以尝试使用node.child [i] - &gt; c,当使用struct var时你必须使用“。”,当使用struct point时必须使用“ - &gt;”或“(&amp; point)。”,我不知道我的想法是真的:)。