die Umsetzung einer TRIE-Datenstruktur
Hii ,
ich War die Implementierung eines trie in C ... aber ich bin immer ein Fehler in der insert_trie Funktion .
Ich konnte nicht herausfinden, warum der root-Knoten ist nicht immer aktualisiert . Bitte helfen Sie mir mit diesem.
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct
{
char value;
int level;
struct node *next;
struct node *list;
}node;
node *trie = NULL;
node *init_trie()
{
node *new = (node *)malloc(sizeof(node));
if(trie == NULL)
{
new->value = '$';
new->next = NULL;
new->list = NULL;
new->level = 0;
trie = new;
printf("\n Finished initializing the trie with the value %c",trie->value);
return trie;
}
printf("\n Trie is already initialized");
return trie;
}
node *insert_trie(char *s)
{
node *nodepointer = trie;
node *new = (node *)malloc(sizeof(node));
node *save = NULL;
int i=0;
while(s[i]!=NULL)
{
nodepointer = nodepointer->list;
while(nodepointer!=NULL)
{
if(s[i] == nodepointer->value)
{
printf("\n Found %c",nodepointer->value);
nodepointer = nodepointer->list;
i++;
}
save = nodepointer;
nodepointer = nodepointer->next;
}
new->value = s[i];
new->next = NULL;
new->list = NULL;
printf("\n Inserting %c",new->value);
save->next = new;
i++;
}
return trie;
}
int main()
{
int num;
char *s = (char *)malloc(sizeof(char)*10);
trie = init_trie();
printf("\n Enter the number of words to enter into the trie ");
scanf("%d",&num);
while(num>0)
{
scanf("%s",s);
//printf("%s",s);
trie = insert_trie(s);
printf("\n Finished inserting the word %s into the trie \n",s);
num --;
}
return 0;
}
Bekomme ich ein "segmentation fault", wegen der Zeile nodepointer = nodepointer->Liste in insert_trie Funktion ... Warum ????
P. S : Dies ist keine Hausaufgaben.Aber ich versuche es zu implementieren. Ich konnte Sie einfach nicht finden den Fehler .
- Welche Fehler sind Sie immer? Welche Linie tritt es auf?
- Finden Sie jetzt... ich bearbeitet habe, die Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Implementieren Sie einen trie mit einfügen, suchen und startsWith Methoden.
Hinweis:
Sie können davon ausgehen, dass alle Eingänge sind aus Kleinbuchstaben a-z" ist.
Ich geschrieben haben, diese sehr einfache Lösung für die oben genannte Frage aus LeetCode. Es bestanden alle 16 Testfälle aus LeetCode. Ich hoffe, das wird helfen.
Einem trie besitzt einen Knoten pro Charakter und du bist nur eine
malloc
pro string. Sie sollten den Aufrufmalloc
für jeden Knoten. (Auchmalloc.h
veraltet ist.stdlib.h
enthältmalloc
da der ANSI-C-standard von 1989.)Innerhalb der if-test, den Sie vorher nodepointer zu nodepointer->Liste. Sobald der test abgeschlossen ist Sie Voraus nodepointer zu nodepointer->weiter, ohne zu prüfen, ob nodepointer ist NULL von der Weiterentwicklung, die aufgetreten in den if-block.