Beispiel #1
0
        public Nodo InsertarValor(Nodo nodo, Usuario usuario, Logical h)
        {
            Nodo n1;

            if (nodo == null || nodo.getUsuario() == null)
            {
                nodo = new Nodo();
                nodo.setUsuario(usuario);
                h.setLogical(true);
            }
            else if (Comparador.menor_que(usuario, nodo.getUsuario()))
            {
                Nodo izquierda;
                izquierda = InsertarValor(nodo.getIzquierda(), usuario, h);
                nodo.setIzquierda(izquierda);
                if (h.booleanValue())
                {
                    // decrementa el fe por aumentar la altura de rama izquierda
                    switch (nodo.fe)
                    {
                    case 1:
                        nodo.fe = 0;
                        h.setLogical(false);
                        break;

                    case 0:
                        nodo.fe = -1;
                        break;

                    case -1:     // aplicar rotación a la izquierda
                        n1 = (Nodo)nodo.getIzquierda();
                        if (n1.fe == -1)
                        {
                            nodo = rotacionII(nodo, n1);
                            this.inserta_texto("Factor de equilibrio = -2; Nodos en Rotacion =" + nodo.getUsuario().nickname + "," + n1.getUsuario().nickname + " Rotacion II");
                        }
                        else
                        {
                            nodo = rotacionID(nodo, n1);
                            this.inserta_texto("Factor de equilibrio = -2; Nodos en Rotacion =" + nodo.getUsuario().nickname + "," + n1.getUsuario().nickname + " Rotacion ID");
                        }

                        h.setLogical(false);
                        break;
                    }
                }
            }
            else if (Comparador.mayor_que(usuario, nodo.getUsuario()))
            {
                Nodo derecha;
                derecha = InsertarValor(nodo.getDerecha(), usuario, h);
                nodo.setDerecha(derecha);
                if (h.booleanValue())
                {
                    // incrementa el fe por aumentar la altura de rama izquierda
                    switch (nodo.fe)
                    {
                    case 1:     // aplicar rotación a la derecha
                        n1 = (Nodo)nodo.getDerecha();
                        if (n1.fe == +1)
                        {
                            nodo = rotacionDD(nodo, n1);
                            this.inserta_texto("Factor de equilibrio = 2; Nodos en Rotacion =" + nodo.getUsuario().nickname + "," + n1.getUsuario().nickname + " Rotacion DD");
                        }
                        else
                        {
                            nodo = rotacionDI(nodo, n1);
                            this.inserta_texto("Factor de equilibrio = 2; Nodos en Rotacion =" + nodo.getUsuario().nickname + "," + n1.getUsuario().nickname + " Rotacion DI");
                        }
                        h.setLogical(false);
                        break;

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

                    case -1:
                        nodo.fe = 0;
                        h.setLogical(false);
                        break;
                    }
                }
            }
            else
            {
                //IGUALES
            }
            return(nodo);
        }
Beispiel #2
0
        public void insertar(Usuario usuario)
        {
            Logical h = new Logical(false);

            nodo_raiz = InsertarValor(nodo_raiz, usuario, h);
        }