示例#1
0
    public string AgregarContactoExistente(string Usuario, string Contacto)
    {
        NodoUsuario tmp = Arbol.ObtenerUsuario(Usuario);

        if (tmp != null)
        {
            NodoUsuario tmp2 = Arbol.ObtenerUsuario(Contacto);
            if (tmp2 != null)
            {
                NodoContacto tmpcon = new NodoContacto(tmp2);
                tmpcon.NickName = tmp2.NickName;
                tmpcon.Pass     = tmp2.Contraseña;
                tmpcon.Correo   = tmp2.Correo;
                tmp.Contactos.Insertar(tmpcon);
                return("Contacto agregado con exito!!!!!");
            }
            else
            {
                return("El usuario contacto no existe");
            }
        }
        else
        {
            return("El usuario al destino no existe");
        }
    }
示例#2
0
 NodoContacto equilibrar(NodoContacto padre)
 {
     if (padre.fe == -2)
     {
         if (padre.izq != null)
         {
             if (padre.izq.fe == -1)
             {
                 return(RSD(padre));
             }
             else if (padre.izq.fe == 1)
             {
                 return(RDI(padre));
             }
         }
     }
     else if (padre.fe == 2)
     {
         if (padre.der != null)
         {
             if (padre.der.fe == -1)
             {
                 return(RDD(padre));
             }
             else if (padre.der.fe == 1)
             {
                 return(RSI(padre));
             }
         }
     }
     //EN CASO QUE NO SE REALIZO NINGUNA ROTACION
     return(padre);
 }
示例#3
0
    string apuntarNodos(NodoContacto r)
    {
        string grafo = "";

        if (r.izq == null && r.der == null)
        {
            grafo = grafo + "\"NICK: " + r.contacto.NickName + "\n" + "Contraseña: " + r.contacto.Contraseña + "\n" + "Correo: " + r.contacto.Correo + "\"\n";
        }
        else
        {
            if (r.izq != null)
            {
                grafo = grafo + "\"NICK: " + r.contacto.NickName + "\n" + "Contraseña: " + r.contacto.Contraseña + "\n" + "Correo: " + r.contacto.Correo + "\"\n -> ";

                grafo = grafo + "\"NICK: " + r.izq.contacto.NickName + "\n" + "Contraseña: " + r.izq.contacto.Contraseña + "\n" + "Correo: " + r.izq.contacto.Correo + "\"\n";
                grafo = grafo + apuntarNodos(r.izq);
            }
            if (r.der != null)
            {
                grafo = grafo + "\"NICK: " + r.contacto.NickName + "\n" + "Contraseña: " + r.contacto.Contraseña + "\n" + "Correo: " + r.contacto.Correo + "\"\n ->";

                grafo = grafo + "\"NICK: " + r.der.contacto.NickName + "\n" + "Contraseña: " + r.der.contacto.Contraseña + "\n" + "Correo: " + r.der.contacto.Correo + "\"\n";
                grafo = grafo + apuntarNodos(r.der);
            }
        }



        return(grafo);
    }
示例#4
0
 public int Altura(NodoContacto padre)
 {
     if (padre == null)
     {
         return(0);
     }
     else
     {
         int alturaizquierdo = Altura(padre.izq);
         int alturaderecho   = Altura(padre.der);
         int max             = 0;
         if (alturaderecho > alturaizquierdo)
         {
             max = alturaderecho;
         }
         else if (alturaizquierdo > alturaderecho)
         {
             max = alturaizquierdo;
         }
         else
         {
             max = alturaderecho;
         }
         return(max + 1);
     }
 }
示例#5
0
 public NodoContacto(NodoUsuario nuevo)
 {
     contacto = nuevo;
     der      = null;
     izq      = null;
     padre    = null;
     fe       = 0;
     NickName = "";
     Pass     = "";
     Correo   = "";
 }
示例#6
0
 public NodoContacto(string nick, string pass, string correo)
 {
     contacto = null;
     der      = null;
     izq      = null;
     padre    = null;
     fe       = 0;
     NickName = nick;
     Pass     = pass;
     Correo   = correo;
 }
示例#7
0
    //****************************METODOS DEL ABC DE LOS CONTACTOS***************************

    public bool AñadirContacto(string Usuario, NodoContacto nuevo)
    {
        NodoUsuario tmp = ObtenerUsuario(Usuario);

        if (tmp != null)
        {
            tmp.Contactos.Insertar(nuevo);
            return(true);
        }
        return(false);
    }
示例#8
0
    NodoContacto RSD(NodoContacto padre)
    {
        NodoContacto aux = padre.izq;

        padre.izq = aux.der;
        if (aux.der != null)
        {
            aux.der.padre = padre;
        }
        aux.der     = padre;
        aux.padre   = padre.padre;
        padre.padre = aux;
        return(aux);
    }
示例#9
0
    NodoContacto RSI(NodoContacto padre)
    {
        NodoContacto aux = padre.der;

        padre.der = aux.izq;
        if (aux.izq != null)
        {
            aux.izq.padre = padre;
        }
        aux.izq     = padre;
        aux.padre   = padre.padre;
        padre.padre = aux;
        return(aux);
    }
示例#10
0
    public bool Insertar(NodoContacto nuevo)
    {
        if (raiz == null)
        {
            raiz       = nuevo;
            raiz.padre = null;
            return(true);
        }
        else
        {
            NodoContacto padre = null;
            NodoContacto tmp   = raiz;
            while (tmp != null)
            {
                padre = tmp;
                if (nuevo.contacto.NickName.CompareTo(tmp.contacto.NickName) == 0)
                {
                    break;
                }
                else if (nuevo.contacto.NickName.CompareTo(tmp.contacto.NickName) < 0)
                {
                    tmp = tmp.izq;
                }
                else if (nuevo.contacto.NickName.CompareTo(tmp.contacto.NickName) > 0)
                {
                    tmp = tmp.der;
                }
            }

            if (tmp == null)
            {
                if (nuevo.contacto.NickName.CompareTo(padre.contacto.NickName) < 0)
                {
                    padre.izq   = nuevo;
                    nuevo.padre = padre;
                    ActualizarFE(raiz);
                    return(true);
                }
                else if (nuevo.contacto.NickName.CompareTo(padre.contacto.NickName) > 0)
                {
                    padre.der   = nuevo;
                    nuevo.padre = padre;
                    ActualizarFE(raiz);
                    return(true);
                }
            }
            return(false);
        }
    }
示例#11
0
    public void ActualizarFE(NodoContacto padre)
    {
        if (padre != null)
        {
            ActualizarFE(padre.izq);
            ActualizarFE(padre.der);

            //CALCULANDO EL FACTOR DE EQUILIBRIO
            int alturaizquierda = Altura(padre.izq);
            int alturaderecha   = Altura(padre.der);

            padre.fe = alturaderecha - alturaizquierda;

            //REALIZANDO ROTACIONES
            NodoContacto equilibrado = equilibrar(padre);

            if (equilibrado != null)
            {
                if (padre == raiz)
                {
                    raiz = equilibrado;
                }
                else
                {
                    NodoContacto tp = equilibrado.padre;
                    if (tp.izq != null)
                    {
                        if (tp.izq.padre != tp)
                        {
                            tp.izq = equilibrado;
                        }
                    }
                    if (tp.der != null)
                    {
                        if (tp.der.padre != tp)
                        {
                            tp.der = equilibrado;
                        }
                    }
                }
                return;
            }
        }
    }
示例#12
0
    public NodoContacto BuscarNuevo(NodoContacto NRee)
    {
        NodoContacto RPadre = NRee;
        NodoContacto R      = NRee;
        NodoContacto aux    = NRee.der;

        while (aux != null)
        {
            RPadre = R;
            R      = aux;
            aux    = aux.izq;
        }

        if (R != NRee.der)
        {
            RPadre.izq = R.der;
            R.der      = NRee.der;
        }
        return(R);
    }
示例#13
0
 public ArbolContactosAVL()
 {
     raiz = null;
 }
示例#14
0
 bool EsHoja(NodoContacto nodo)
 {
     return(nodo.izq == null && nodo.der == null);
 }
示例#15
0
    public bool Eliminar(string name)
    {
        NodoContacto aux       = raiz;
        NodoContacto padre     = raiz;
        bool         izquierdo = true;

        while (name.CompareTo(aux.contacto.NickName) != 0)
        {
            padre = aux;
            if (name.CompareTo(aux.contacto.NickName) < 0)
            {
                izquierdo = true;
                aux       = aux.izq;
            }
            else if (name.CompareTo(aux.contacto.NickName) > 0)
            {
                izquierdo = false;
                aux       = aux.der;
            }

            if (aux == null)
            {
                return(false);
            }
        }

        if (EsHoja(aux))
        {
            if (aux == raiz)
            {
                raiz = null;
            }
            else if (izquierdo)
            {
                padre.izq = null;
            }
            else
            {
                padre.der = null;
            }
        }
        else if (aux.der == null)
        {
            if (aux == raiz)
            {
                raiz = aux.izq;
            }
            else if (izquierdo)
            {
                padre.izq = aux.izq;
            }
            else
            {
                padre.der = aux.izq;
            }
        }
        else if (aux.izq == null)
        {
            if (aux == raiz)
            {
                raiz = aux.der;
            }
            else if (izquierdo)
            {
                padre.izq = aux.der;
            }
            else
            {
                padre.der = aux.izq;
            }
        }
        else
        {
            NodoContacto Nuevo = BuscarNuevo(aux);
            if (aux == raiz)
            {
                raiz = Nuevo;
            }
            else if (izquierdo)
            {
                padre.izq = Nuevo;
            }
            else
            {
                padre.der = Nuevo;
            }
            Nuevo.izq = aux.izq;
        }

        ActualizarFE(raiz);
        return(true);
    }
示例#16
0
 NodoContacto RDI(NodoContacto padre)
 {
     padre.izq = RSI(padre.izq);
     return(RSD(padre));
 }
示例#17
0
 NodoContacto RDD(NodoContacto padre)
 {
     padre.der = RSD(padre.der);
     return(RSI(padre));
 }