private int removeAux(string word, ITrieNode node) //TODO: FALTA PROBAR { if (word == "") { //Caso base recursivo if (!Convert.ToBoolean(node.isTerminated())) { return(0); } } else if (Convert.ToBoolean(node.isTerminated())) //TODO: Falta verificar que ya se haya revisado toda la palabra { return(0); } else { //Caso trivial removeAux(word.Substring(1), node.value(word[0])); } //Rollback if (node.getChildrenCount() < 2) { node.asign(word[0], null); return(1); } else { return(0); } }
public bool MoveNext() { //Verificamos si estamos en el inicio del árbol y cuál es el último cáracter recorrido if (0 == _currentWord.Length) //Si sí, empezamos desde el inicio { _currentNode = MoveNextAux(_currentNode); return(true); } else //Si no avanzamos a partir del último carácter leído { if (_currentNode != null) { if (_currentNode.getChildrenCount() > 0) { for (int i = charToNum(_currentWord[_currentWord.Length]) + 1; i < 27; i++) { if (_currentNode.value(numToChar(i)) != null) { _currentNode = _currentNode.value(numToChar(i));//TODO: Genera inconsistencia _currentNode = MoveNextAux(_currentNode); } } } else { _currentWord.Substring(0, _currentWord.Length - 1);//Elimina el último caracter _currentNode = _currentNode.getParent(); for (int i = charToNum(_currentWord[_currentWord.Length]) + 1; i < 27; i++) { if (_currentNode.value(numToChar(i)) != null) { _currentNode = _currentNode.value(numToChar(i));//TODO: Genera inconsistencia _currentNode = MoveNextAux(_currentNode); } } } return(true); } else { return(false); } } }
public int search(string word) { ITrieNode actualNode = _rootNode; foreach (char c in word) { if (actualNode.value(c) == null) { //Si la letra no existe no está break; } else { //Si sí existe se sigue revisando actualNode = actualNode.value(c); } } return(actualNode.isTerminated()); }
private ITrieNode MoveNextAux(ITrieNode currentNode) { if (Convert.ToBoolean(currentNode.isTerminated())) {//Caso Base Recursivo return(currentNode); } else { for (int i = 0; i < 27; i++) { char currentChar = numToChar(i); if (currentNode.value(currentChar) != null) //Si encuentra una letra { _currentWord += currentChar; //Se añade la letra encontrada return(MoveNextAux(currentNode.value(currentChar))); } } return(null); } }
public int insert(string word) { ITrieNode actualNode = _rootNode; foreach (char c in word) { if (actualNode.value(c) == null) { //Si la letra no existe se crea la nueva rama actualNode.asign(c, new TrieNode(actualNode)); actualNode = actualNode.value(c); } else { //Si sí existe se sigue revisando actualNode = actualNode.value(c); } } return(actualNode.terminate());//Retorna si ya la palabra existía }