Реализация вставки и поиска в дереве префиксов

Я работаю над реализацией с префиксом, где я пытаюсь построить следующее

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;
};

person RRP    schedule 16.02.2017    source источник
comment
Как определяется struct trieNode?   -  person Mathieu    schedule 16.02.2017
comment
@purplepsycho я добавил это к вопросу   -  person RRP    schedule 16.02.2017
comment
ваш printf("Longitude: %s", pNode->longi); также выполняется, если pNode имеет значение NULL и вы вышли из цикла. Вместо установки флага внутри цикла вы можете просто вернуть False.   -  person joop    schedule 16.02.2017
comment
@joop я меняю этот оператор break на return. Но я все еще вижу, что значения long и lat распечатываются как нулевые.   -  person RRP    schedule 16.02.2017
comment
Разве это не дубликат вашего собственного вопроса примерно 3 часа назад?   -  person barak manos    schedule 16.02.2017


Ответы (1)


Итак, я обнаружил проблему, с которой столкнулся

Вместо

node->longi = malloc(longitudeLen + 1);
node->lat = malloc(latitudeLen + 1);

это должно было быть

parent->longi = malloc(longitudeLen + 1);
parent->lat = malloc(latitudeLen + 1);
person RRP    schedule 18.02.2017