Я работаю над реализацией с префиксом, где я пытаюсь построить следующее
F->R->E->T->(широта + долгота)
Я реализовал функцию вставки, и она, кажется, работает. Я проверяю это, распечатывая соответствующие значения широты и долготы.
Проблема, с которой я сталкиваюсь, заключается в моей функции поиска, где значения широты и долготы возвращают (null). Также функция поиска возвращает true для слова.
На данный момент я не могу понять, где основная проблема
Вставить функцию
int trieInsert(struct trieNode *node, char *key, char *longitude, char *latitude){
struct trieNode *parent = node;
//printf("Longi: %s", longitude);
//printf(" ");
//printf("Latitude: %s \n", latitude);
if(key){
int index = 0;
int i = 0;
if(node){
while(key[i] != '\0'){
int indexVal = convertLetterToIndex(key[i]);
if(!parent->children[indexVal]){
parent->children[indexVal] = initializeTrie();
parent->children[indexVal]->value = key[i];
}
parent = parent->children[indexVal];
i++;
}
int longitudeLen = strlen(longitude);
int latitudeLen = strlen(latitude);
node->longi = malloc(longitudeLen + 1);
strncpy(node->longi, longitude, longitudeLen + 1);
node->longi[longitudeLen] = '\0';
//printf("Longi: %s", node->longi);
node->lat = malloc(latitudeLen + 1);
strncpy(node->lat, latitude, latitudeLen + 1);
node->lat[latitudeLen] = '\0';
//printf("Lati: %s \n", node->lat);
}
}
}
Моя функция поиска
bool getTrie(struct trieNode *root, char *key){
struct trieNode *pNode = root;
bool flag = true;
if(!key){
printf("Word is empty \n");
return false;
}
if(!root){
printf("Trie is empty \n");
return false;
}
int i = 0;
while(key[i] != '\0'){
int indexVal = convertLetterToIndex(key[i]);
if(!pNode->children[indexVal]){
printf("Character not found in trie \n");
flag = false;
break;
}
pNode = pNode->children[indexVal];
i++;
}
printf("Longitude: %s", pNode->longi);
printf(" ");
printf("Latitude: %s \n", pNode->lat);
return flag;
}
В моей функции вставки правильно ли добавляются значения широты и долготы?
ИЗМЕНИТЬ
Определение моей структуры
struct trieNode{
char *longi;
char *lat;
struct trieNode *children[27];
char value;
};
struct trieNode
? - person Mathieu   schedule 16.02.2017printf("Longitude: %s", pNode->longi);
также выполняется, если pNode имеет значение NULL и вы вышли из цикла. Вместо установки флага внутри цикла вы можете просто вернуть False. - person joop   schedule 16.02.2017