Esempio n. 1
0
 protected Nodo buscarUsuario(Nodo raizSub, Comparador buscado)
 {
     if (raizSub == null)
     {
         return(null);
     }
     else if (buscado.UsuarioIgual(raizSub.valorNodo()))
     {
         return(raizSub);
     }
     else if (buscado.UsuarioMenor(raizSub.valorNodo()))
     {
         return(buscarUsuario(raizSub.subarbolIzq(), buscado));
     }
     else if (buscado.UsuarioMayor(raizSub.valorNodo()))
     {
         return(buscarUsuario(raizSub.subarbolDch(), buscado));
     }
     return(null);
 }
Esempio n. 2
0
        private NodoAvl insertarAvl(NodoAvl raiz, Comparador dt, Logical h)
        {
            NodoAvl n1;

            if (raiz == null)
            {
                raiz = new NodoAvl(dt);
                h.enviarLogica(true);
            }

            else if (dt.UsuarioMenor(raiz.valorNodo()))
            {
                NodoAvl iz;
                iz = insertarAvl((NodoAvl)raiz.subarbolIzq(), dt, h);
                raiz.ramaIzq(iz);
                //De verificar la rama izquierda en donde se insertara el nodo
                if (h.valorLogico())//obtiene un dato para verificar si hay datos
                {
                    switch (raiz.fe)
                    {
                    case 1:
                        raiz.fe          = 0;
                        factorEquilibrio = 0;
                        archivoPlano.vitacoraArbol(factorEquilibrio, "Raiz", raiz);

                        h.enviarLogica(false);
                        break;

                    case 0:
                        raiz.fe          = -1;
                        factorEquilibrio = -1;
                        archivoPlano.vitacoraArbol(factorEquilibrio, "Se inserta en la izquierda", raiz);
                        break;

                    case -1:     // aplicar rotación a la izquierda
                        n1 = (NodoAvl)raiz.subarbolIzq();
                        if (n1.fe == -1)
                        {
                            factorEquilibrio = -2;
                            raiz             = rotacionII(raiz, n1);
                            archivoPlano.vitacoraArbol(factorEquilibrio, "Rotacion Izquierda Izquierda", raiz);
                        }
                        else
                        {
                            raiz = rotacionID(raiz, n1);
                            archivoPlano.vitacoraArbol(factorEquilibrio, "Rotacion Izquierda Derecha", raiz);

                            h.enviarLogica(false);
                        }
                        break;
                    }
                }
            }
            else if (dt.UsuarioMayor(raiz.valorNodo()))
            {
                NodoAvl dr;
                dr = insertarAvl((NodoAvl)raiz.subarbolDch(), dt, h);
                raiz.ramaDch(dr);

                if (h.valorLogico())
                {
                    switch (raiz.fe)
                    {
                    case 1:     // aplicar rotación a la derecha
                        n1 = (NodoAvl)raiz.subarbolDch();
                        if (n1.fe == +1)
                        {
                            factorEquilibrio = 2;
                            raiz             = rotacionDD(raiz, n1);
                            archivoPlano.vitacoraArbol(factorEquilibrio, " Rotacion derecha derecha", raiz);
                        }
                        else
                        {
                            raiz = rotacionDI(raiz, n1);
                            archivoPlano.vitacoraArbol(factorEquilibrio, " Rotacion derecha izquierda", raiz);
                            h.enviarLogica(false);
                        }
                        break;

                    case 0:
                        raiz.fe          = +1;
                        factorEquilibrio = 1;
                        archivoPlano.vitacoraArbol(factorEquilibrio, "Hacia la Derecha", raiz);
                        break;

                    case -1:
                        raiz.fe          = 0;
                        factorEquilibrio = 0;
                        archivoPlano.vitacoraArbol(factorEquilibrio, "Equilibrado", raiz);
                        h.enviarLogica(false);
                        break;
                    }
                }
            }
            return(raiz);
        }