예제 #1
0
        private NodoAvl ramaDerecha(NodoAvl raiz, Comparador dt, Logical h)
        {
            NodoAvl n1;
            NodoAvl dr;

            dr = insertarAvl((NodoAvl)raiz.subarbolDcho(), dt, h);
            raiz.ramaDcho(dr);
            // regreso por los nodos del camino de búsqueda
            if (h.booleanValue())
            {
                // incrementa el fe por aumentar la altura de rama izquierda
                switch (raiz.fe)
                {
                case 1:    // aplicar rotación a la derecha
                    n1 = (NodoAvl)raiz.subarbolDcho();
                    if (n1.fe == +1)
                    {
                        raiz = rotacionDD(raiz, n1);
                    }
                    else
                    {
                        raiz = rotacionDI(raiz, n1);
                    }
                    h.setLogical(false);
                    break;

                case 0:
                    raiz.fe = +1;
                    break;

                case -1:
                    raiz.fe = 0;
                    h.setLogical(false);
                    break;
                }
            }
            return(raiz);
        }
예제 #2
0
 private NodoAvl rotacionII(NodoAvl n, NodoAvl n1)
 {
     n.ramaIzdo(n1.subarbolDcho());
     n1.ramaDcho(n);
     // actualización de los factores de equilibrio
     if (n1.fe == -1) // se cumple en la inserción
     {
         n.fe  = 0;
         n1.fe = 0;
     }
     else
     {
         n.fe  = -1;
         n1.fe = 1;
     }
     return(n1);
 }