Beispiel #1
0
        public int BuscarPosicionValor(NodoB <T> nodo, T valor)
        {
            int posicion = int.MinValue;
            int hijo     = int.MinValue;

            for (int i = 0; i < nodo.Valores.Length - 1; i++)
            {
                if (nodo.Valores[i] != null)
                {
                    if ((int)comparador1.DynamicInvoke(valor, nodo.Valores[i]) == 0 && (int)comparador2.DynamicInvoke(valor, nodo.Valores[i]) == 0)
                    {
                        posicion = nodo.posicion;
                    }
                }
            }

            if (posicion == int.MinValue && !VerSiEsHoja(nodo))
            {
                for (int i = 0; i < nodo.Valores.Length - 1; i++)
                {
                    if ((int)comparador1.DynamicInvoke(valor, nodo.Valores[i]) == -1)
                    {
                        hijo = i;
                    }
                    else if ((int)comparador1.DynamicInvoke(valor, nodo.Valores[i]) == 1 && i == nodo.GetCantidadValores() - 1)
                    {
                        hijo = i + 1;
                    }
                    else if ((int)comparador1.DynamicInvoke(valor, nodo.Valores[i]) == 0)
                    {
                        if ((int)comparador2.DynamicInvoke(valor, nodo.Valores[i]) == -1)
                        {
                            hijo = i;
                        }
                        else if ((int)comparador2.DynamicInvoke(valor, nodo.Valores[i]) == 1 && i == nodo.GetCantidadValores() - 1)
                        {
                            hijo = i + 1;
                        }
                    }

                    if (hijo != int.MinValue)
                    {
                        break;
                    }
                }

                return(BuscarPosicionValor(GuardarNodo(BReader <T> .LeerNodo(RutaArbol, hijo)), valor));
            }
            else if (VerSiEsHoja(nodo) && posicion == int.MinValue)
            {
                posicion = int.MaxValue;
                return(posicion);
            }
            else
            {
                return(posicion);
            }
        }
Beispiel #2
0
        public int BuscarPosicion(T valor, NodoB <T> nodo)
        {
            int  hijo   = int.MinValue;
            bool repite = VerSiRepite(valor, nodo);
            bool hoja   = VerSiEsHoja(nodo);

            if (!hoja && !repite)
            {
                for (int i = 0; i < nodo.Valores.Length - 1; i++)
                {
                    if ((int)comparador1.DynamicInvoke(valor, nodo.Valores[i]) == -1)
                    {
                        hijo = i;
                    }
                    else if ((int)comparador1.DynamicInvoke(valor, nodo.Valores[i]) == 1 && i == nodo.GetCantidadValores() - 1)
                    {
                        hijo = i + 1;
                    }
                    else if ((int)comparador1.DynamicInvoke(valor, nodo.Valores[i]) == 0)
                    {
                        if ((int)comparador2.DynamicInvoke(valor, nodo.Valores[i]) == -1)
                        {
                            hijo = i;
                        }
                        else if ((int)comparador2.DynamicInvoke(valor, nodo.Valores[i]) == 1 && i == nodo.GetCantidadValores() - 1)
                        {
                            hijo = i + 1;
                        }
                    }

                    if (hijo != int.MinValue)
                    {
                        break;
                    }
                }
            }
            else if (repite)
            {
                hijo = int.MaxValue;
            }

            if (hijo == int.MaxValue)
            {
                return(hijo);
            }
            else if (!hoja)
            {
                return(BuscarPosicion(valor, GuardarNodo(BReader <T> .LeerNodo(RutaArbol, nodo.hijos[hijo]))));
            }
            else
            {
                return(nodo.posicion);
            }
        }