2017-02-16 77 views
0

我的工作有前綴的實施中,在我試圖構造如下插入和前綴搜索執行樹

F-> R-> E->筆 - >(緯度經度+)

我已經實現了插入功能,它似乎工作。我通過打印出相應的緯度和經度值來驗證這一點。

我遇到的問題是在我的搜索功能中,經度和緯度值返回(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; 
}; 
+0

如何定義'struct trieNode'? – purplepsycho

+0

@purplepsycho我已將它添加到問題 – RRP

+1

您的'printf(「Longitude:%s」,pNode-> longi);'如果pNode爲NULL並且跳出循環,也會執行。而不是在循環內設置一個標誌,你可以返回False。 – joop

回答

0

所以我發現我跑的問題納入

而不是

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

它應該是

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