Пример #1
0
        private NodoAvl rotacionDI(NodoAvl n, NodoAvl n1)
        {
            NodoAvl n2;

            n2 = (NodoAvl)n1.subarbolIzdo();
            n.ramaDcho(n2.subarbolIzdo());
            n2.ramaIzdo(n);
            n1.ramaIzdo(n2.subarbolDcho());
            n2.ramaDcho(n1);
            // actualización de los factores de equilibrio
            if (n2.fe == +1)
            {
                n.fe = -1;
            }
            else
            {
                n.fe = 0;
            }
            if (n2.fe == -1)
            {
                n1.fe = 1;
            }
            else
            {
                n1.fe = 0;
            }
            n2.fe = 0;
            return(n2);
        }
Пример #2
0
        public void insertar(Object valor) //throws Exception
        {
            Comparador dato;
            Logical    h = new Logical(false); // intercambia un valor booleano

            dato = (Comparador)valor;
            raiz = insertarAvl(raiz, dato, h);
        }
Пример #3
0
        private NodoAvl insertarAvl(NodoAvl raiz, Comparador dt, Logical h)
        {
            // NodoAvl n1;
            if (raiz == null)
            {
                raiz = new NodoAvl(dt);
                h.setLogical(true);
            }

            else if (dt.menorNumero(raiz.valorNodo()))
            {
                ramaDerecha(raiz, dt, h);
            }
            else if (dt.mayorNumero(raiz.valorNodo()))
            {
                ramaIzquierda(raiz, dt, h);
            }
            // raiz 1 Guatemala loclla
            //      derecho 1. zacapa lolo

            //    1 zacapa papa
            else if (dt.igualque(raiz.valorNodo()))
            {
                if (dt.departamentoMayor(raiz.valorNodo()))
                {
                    raiz = ramaDerecha(raiz, dt, h);
                }

                else if (dt.departamentoMenor(raiz.valorNodo()))
                {
                    raiz = ramaIzquierda(raiz, dt, h);
                }

                else if (dt.departamentoIgual(raiz.valorNodo()))
                {
                    if (dt.nombreAlfabeticoDer(raiz.valorNodo()))
                    {
                        raiz = ramaDerecha(raiz, dt, h);
                    }

                    else if (dt.nombreAlfabeticoIzq(raiz.valorNodo()))
                    {
                        raiz = ramaIzquierda(raiz, dt, h);
                    }
                }
            }

            else
            {
                throw new Exception("No puede haber claves repetidas ");
            }
            return(raiz);
        }
Пример #4
0
 private NodoAvl rotacionDD(NodoAvl n, NodoAvl n1)
 {
     n.ramaDcho(n1.subarbolIzdo());
     n1.ramaIzdo(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);
 }
Пример #5
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);
        }
Пример #6
0
 public static NodoAvl nuevoArbol(NodoAvl ramaIzqda, Object dato, NodoAvl ramaDrcha)
 {
     return(new NodoAvl(dato, ramaIzqda, ramaDrcha));
 }
Пример #7
0
 public ArbolAVL()
 {
     raiz = null;
 }
Пример #8
0
 public NodoAvl(Object valor, NodoAvl ramaIzdo, NodoAvl ramaDcho) : base(ramaIzdo, valor, ramaDcho)
 {
     fe = 0;
 }