Beispiel #1
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);
        }