示例#1
0
    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);
        }
    }
示例#2
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);
         }
     }
 }
示例#3
0
    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());
    }
示例#4
0
 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);
     }
 }
示例#5
0
    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
    }