2017-12-17 13 views
2

は、以下のように私はこの木の店舗は、木を使って単語とその定義をCでdictionnaryを実装しました:あなたが見ることができるようにCのツリー辞書から単語を削除する方法は?

Dictionnary

、いくつかの単語は、同じ文字を共有しています。 しかし、今私は削除機能を実装したいと思うが、進める方法がわからない...私は単語の終わりを削除し始めるべきであることを知っている... ここに私のコードです、あなたの未来に感謝助けて !

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


typedef struct _noeud{ 
    char *value; 
    struct _noeud *child[26]; 
}noeud_t; 

typedef struct tree{ 
    node_t root; 
}Tree; 

Tree dict; 

int getPos(char letter){ 
    char alpha[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 
    int i; 
    for(i=0;i<strlen(alpha);i++){ 
     if(alpha[i]==letter){ 
      return i; 
     } 
    } 
    return -1; 

} 

void addWord(node_t *node, char *word, char *def){ 
    int i; 
    for(i = 0; i < strlen(word);i++){ 
     int letter=getPos(word[i]); 
     if(letter==-1){ 
      printf("Unknown letter... \n"); 
     } 
     node_t *parent = node; 
     node = node->child[letter]; 
     if(!node){ 
      node = malloc(sizeof(node_t)); 
      parent->child[letter]=node; 
     } 
    } 
    node->value = malloc(strlen(def)+1); 
    strncpy(node->value,def,strlen(def)), 
    printf("Word %s added to dictionnary.\n",word); 
    fflush(stdin); 
} 

void findWord(node_t *node, char *word){ 
    printf("Looking for word %s \n",word); 
    int i; 
    for(i=0;i<strlen(word);i++) { 
     int letter = getPos(word[i]); 
     if(NULL ==node->child[letter]){ 
      printf("Unknown word ...\n"); 
      return; 
     } 
     else{ 
      node = node->child[letter]; 
     } 
    } 
    printf("Word found, its definition is : %s\n",node->value); 

} 

void deleteWord(node_t *node, char *word){ 
    int i=0; 
    for(i=0;i<strlen(word);i++) { 
     //... 
    } 
    printf("Word deleted !\n"); 
} 


int main(){ 
    addWord(&dico.root,"dog","it's an animal"); 
    addWord(&dico.root,"pineapple","it's a fruit"); 
    addWord(&dico.root,"car","something to drive"); 
    findWord(&dico.root,"dog"); 
    findWord(&dico.root,"car"); 
    findWord(&dico.root,"pineapple"); 
    deleteWord(&dico.root,"pineapple"); 
    return 0; 
} 
+0

に役立つことを願っています。この用語をWebで検索することができます。 –

答えて

2

私はあなたにそれを解決する方法を教えてもらえますが、コードを書いていないのは残念です。

あなたのコードからそう

、私はそれが内部で次にそれを使用して完璧に動作している場合、あなたは、findWord機能を持っていることを見ることができます削除今は3で考える必要があるあなたがそれを指しているこの段階で単語を探しに行きます可能性。

  1. 削除される単語に子がない場合は、それ以上の問題はなくなります。
  2. 削除する単語に1つの子がある場合は、その単語の親をその単語の子にします。
  3. 削除する単語に複数の子がある場合は、その単語を子の1つに置き換えて削除します。

私はこれがあなた、あなたが*トライ*(スペルに注意)と呼ばれてきた何

+0

子供を退職させる考えは全く間違っています。 –

関連する問題