private static DictonaryTreeNode BuildDictionary(string[] wordList) { //création de la racine DictonaryTreeNode root = new DictonaryTreeNode { Letter = ' ', IsLetterEndOfWord = false, NextLetters = null }; // traitement des mots for (int i = 0; i <= wordList.Length - 1; i++) // traitement des lettres du mot { string mot = wordList[i].ToLower(); // Création de la branche correspondant au mot par passage du noeud racine à la prcédure récussive VerifAjouteLettre HandleWordInsertionAtLetter(root, 0, mot); } return(root); // affecte à NoeudRacineConstructionArbre accessible partout dans form1 la valeur du pointeur de Racine }
private static void HandleWordInsertionAtLetter(DictonaryTreeNode currentNode, int letterIndex, string Word) //Création de l'arbre { if (Word.Length == 0) { return; } // n'effectue pas le traitement pour un mot vide char currentLetter = Word[letterIndex]; if (currentNode.NextLetters == null) { // si le dico n'existe pas on en crée un vierge currentNode.NextLetters = new Dictionary <char, DictonaryTreeNode>(); } DictonaryTreeNode childNode; if (!currentNode.NextLetters.ContainsKey(currentLetter))//le dico existe et si la clé existe { childNode = new DictonaryTreeNode { Letter = currentLetter, IsLetterEndOfWord = false }; currentNode.NextLetters.Add(currentLetter, childNode); } else { childNode = currentNode.NextLetters[currentLetter]; } if (letterIndex == Word.Length - 1) { // dernière lettre du mot : On ajoute le noeud correspondant childNode.IsLetterEndOfWord = true; } else { letterIndex++; HandleWordInsertionAtLetter(childNode, letterIndex, Word); } }
public WordDictionary(string[] wordList) { this.m_root = BuildDictionary(wordList); }