Beispiel #1
0
 private void comparar(NodoAVL hoja, NodoAVL nuevo)
 {
     if (String.Compare(hoja.Nickname, nuevo.Nickname) < 0)
     {
         if (hoja.Derecha == null)
         {
             hoja.Derecha = nuevo;
             nuevo.Padre  = hoja;
         }
         else
         {
             comparar(hoja.Derecha, nuevo);
         }
     }
     else if (String.Compare(hoja.Nickname, nuevo.Nickname) > 0)
     {
         if (hoja.Izquierda == null)
         {
             hoja.Izquierda = nuevo;
             nuevo.Padre    = hoja;
         }
         else
         {
             comparar(hoja.Izquierda, nuevo);
         }
     }
 }
Beispiel #2
0
 private void nodosAVL(NodoAVL n)
 {
     if (n != null)
     {
         dot = dot + n.Nickname + "[label=\"<f0>|<f1>Nickname: " + n.Nickname + "|<f2>\"]\n";
         nodosAVL(n.Izquierda);
         nodosAVL(n.Derecha);
     }
 }
Beispiel #3
0
 public NodoAVL(NodoArbol datos)
 {
     this.usuario    = datos;
     this.Nickname   = datos.Nickname;
     this.Contrasena = datos.Contrasena;
     this.Correo     = datos.Correo;
     this.Derecha    = null;
     this.izquierda  = null;
 }
Beispiel #4
0
 public int contarContactos(NodoAVL n)
 {
     if (n != null)
     {
         return(1 + contarContactos(n.Izquierda) + contarContactos(n.Derecha));
     }
     else
     {
         return(0);
     }
 }
Beispiel #5
0
 private int altura(NodoAVL n)
 {
     if (n == null)
     {
         return(0);
     }
     else
     {
         return(1 + maximo(altura(n.Derecha), altura(n.Izquierda)));
     }
 }
Beispiel #6
0
        private NodoAVL dobleDerecha(NodoAVL nodo)
        {
            NodoAVL Padre = nodo.Padre;
            NodoAVL P     = nodo;
            NodoAVL Q     = P.Izquierda;
            NodoAVL R     = Q.Derecha;
            NodoAVL B     = R.Izquierda;
            NodoAVL C     = R.Derecha;

            if (Padre != null)
            {
                if (Padre.Derecha == P)
                {
                    Padre.Derecha = R;
                }
                else
                {
                    Padre.Izquierda = R;
                }
            }
            else
            {
                Raiz = R;
            }

            Q.Derecha   = B;
            P.Izquierda = C;
            R.Izquierda = Q;
            R.Derecha   = P;

            R.Padre = Padre;
            P.Padre = Q.Padre = R;

            if (B != null)
            {
                B.Padre = Q;
            }
            if (C != null)
            {
                C.Padre = P;
            }
            switch (R.Fe)
            {
            case -1: Q.Fe = 0; P.Fe = 1; break;

            case 0: Q.Fe = 0; P.Fe = 0; break;

            case 1: Q.Fe = -1; P.Fe = 0; break;
            }
            R.Fe = 0;

            return(R);
        }
Beispiel #7
0
        public void Insertar(String nickname, String contraseña, String correo)
        {
            NodoAVL nuevo = new NodoAVL(nickname, correo, contraseña);

            if (Raiz == null)
            {
                Raiz = nuevo;
            }
            else
            {
                comparar(Raiz, nuevo);
            }
            Raiz = equilibrar(Raiz);
        }
Beispiel #8
0
        public void Insertar(NodoArbol jugador)
        {
            NodoAVL nuevo = new NodoAVL(jugador);

            if (Raiz == null)
            {
                Raiz = nuevo;
            }
            else
            {
                comparar(Raiz, nuevo);
            }
            Raiz = equilibrar(Raiz);
        }
Beispiel #9
0
        private void enlacesAVL(NodoAVL n)
        {
            if (n != null)
            {
                if (n.Derecha != null)
                {
                    dot = dot + n.Nickname + ":f2->" + n.Derecha.Nickname + ":f1;\n";
                }

                if (n.Izquierda != null)
                {
                    dot = dot + n.Nickname + ":f0->" + n.Izquierda.Nickname + ":f1;\n";
                }

                enlacesAVL(n.Izquierda);
                enlacesAVL(n.Derecha);
            }
        }
Beispiel #10
0
 public NodoAVL Buscar(String nickname, NodoAVL n)
 {
     if (n != null)
     {
         if (String.Compare(n.Nickname, nickname) == 0)
         {
             return(n);
         }
         else if (String.Compare(n.Nickname, nickname) < 0)
         {
             if (n.Derecha != null)
             {
                 return(Buscar(nickname, n.Derecha));
             }
             else
             {
                 return(null);
             }
         }
         else if (String.Compare(n.Nickname, nickname) > 0)
         {
             if (n.Izquierda != null)
             {
                 return(Buscar(nickname, n.Izquierda));
             }
             else
             {
                 return(null);
             }
         }
         else
         {
             return(null);
         }
     }
     else
     {
         return(null);
     }
 }
Beispiel #11
0
        private NodoAVL simpleDerecha(NodoAVL nodo)
        {
            NodoAVL Padre = nodo.Padre;
            NodoAVL P     = nodo;
            NodoAVL Q     = P.Izquierda;
            NodoAVL B     = Q.Derecha;

            if (Padre != null)
            {
                if (Padre.Derecha == P)
                {
                    Padre.Derecha = Q;
                }
                else
                {
                    Padre.Izquierda = Q;
                }
            }
            else
            {
                Raiz = Q;
            }

            P.Izquierda = B;
            Q.Derecha   = P;

            P.Padre = Q;
            if (B != null)
            {
                B.Padre = P;
            }
            Q.Padre = Padre;

            P.Fe = 0;
            Q.Fe = 0;

            return(Q);
        }
Beispiel #12
0
        public NodoAVL equilibrar(NodoAVL nodo)
        {
            if (nodo.Izquierda != null)
            {
                nodo.Izquierda = equilibrar(nodo.Izquierda);
            }
            if (nodo.Derecha != null)
            {
                nodo.Derecha = equilibrar(nodo.Derecha);
            }

            nodo.Fe = altura(nodo.Derecha) - altura(nodo.Izquierda);

            if (nodo.Fe <= -2)
            {
                if (nodo.Izquierda.Fe >= 1)
                {
                    nodo = dobleDerecha(nodo);
                }
                else
                {
                    nodo = simpleDerecha(nodo);
                }
            }
            else if (nodo.Fe >= 2)
            {
                if (nodo.Derecha.Fe <= -1)
                {
                    nodo = dobleIzquierda(nodo);
                }
                else
                {
                    nodo = simpleIzquierda(nodo);
                }
            }
            return(nodo);
        }
Beispiel #13
0
        public void Eliminar(String nickname)
        {
            NodoAVL n = Buscar(nickname, Raiz);

            if (n != null)
            {
                if (n.Derecha == null && n.Izquierda == null)
                {
                    if (n == this.Raiz)
                    {
                        this.Raiz = null;
                    }
                    else
                    {
                        if (n.Padre.Derecha == n)
                        {
                            n.Padre.Derecha = null;
                        }
                        else
                        {
                            n.Padre.Izquierda = null;
                        }
                    }
                }
                else if (n.Derecha == null && n.Izquierda != null)
                {
                    if (n.Padre == null)
                    {
                        this.Raiz = n.Izquierda;
                    }
                    else
                    {
                        if (n.Padre.Derecha == n)
                        {
                            n.Padre.Derecha = n.Izquierda;
                        }
                        else
                        {
                            n.Padre.Izquierda = n.Izquierda;
                        }
                    }
                }
                else if (n.Derecha != null & n.Izquierda == null)
                {
                    if (n.Padre == null)
                    {
                        this.Raiz = n.Derecha;
                    }
                    else
                    {
                        if (n.Padre.Derecha == n)
                        {
                            n.Padre.Derecha = n.Derecha;
                        }
                        else
                        {
                            n.Padre.Izquierda = n.Derecha;
                        }
                    }
                }
                else
                {
                    //AMBOS NODOS ESTAN LLENOS
                    NodoAVL aux = n.Derecha;
                    while (aux.Izquierda != null)
                    {
                        aux = aux.Izquierda;
                    }
                    if (aux.Derecha != null)
                    {
                        if (aux.Padre != n)
                        {
                            aux.Padre.Izquierda = aux.Derecha;
                            aux.Derecha.Padre   = aux.Padre;
                        }
                        else
                        {
                            aux.Padre.Derecha = aux.Derecha;
                            aux.Derecha.Padre = aux.Padre;
                        }
                    }
                    else
                    {
                        if (aux.Padre != n)
                        {
                            aux.Padre.Izquierda = null;
                        }
                        else
                        {
                            aux.Padre.Derecha = null;
                        }
                    }
                    //Si el nodo a eliminar es la Raiz
                    if (n.Padre == null)
                    {
                        Raiz          = aux;
                        aux.Padre     = null;
                        aux.Izquierda = n.Izquierda;
                        aux.Derecha   = n.Derecha;
                        if (n.Izquierda != null)
                        {
                            n.Izquierda.Padre = aux;
                        }

                        if (n.Derecha != null)
                        {
                            n.Derecha.Padre = aux;
                        }
                    }
                    else
                    {
                        aux.Izquierda = n.Izquierda;
                        aux.Derecha   = n.Derecha;
                        if (n.Izquierda != null)
                        {
                            n.Izquierda.Padre = aux;
                        }

                        if (n.Derecha != null)
                        {
                            n.Derecha.Padre = aux;
                        }

                        if (n.Padre.Derecha == n)
                        {
                            n.Padre.Derecha = aux;
                        }
                        else
                        {
                            n.Padre.Izquierda = aux;
                        }
                    }
                }
            }
            Raiz = equilibrar(this.raiz);
        }