前缀树中的插入和搜索实现

时间:2017-02-16 09:39:23

标签: c prefix-tree

我正在使用前缀进行实现,我正在尝试构建以下

F-> R-> E-> T->(纬度+经度)

我已经实现了insert函数,它似乎正在工作。我通过打印出相应的纬度和经度值来验证这一点。

我遇到的问题是在我的搜索功能中,纬度和经度值返回(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;
};

1 个答案:

答案 0 :(得分:0)

所以我发现了我遇到的问题

而不是

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

应该是

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