Esempio n. 1
0
        public int Numerodecontactos(NodoAVL nodo)
        {
            int aux = 0;

            if (nodo != null)
            {
                aux += 1;
                if (nodo.GetHijoIzquierdo() != null)
                {
                    aux += Numerodecontactos(nodo.GetHijoIzquierdo());
                }
                if (nodo.GetHijoDerecho() != null)
                {
                    aux += Numerodecontactos(nodo.GetHijoDerecho());
                }
            }
            return(aux);
        }
Esempio n. 2
0
        public void Insertar(NodoArbol aux)
        {
            string  usuario    = aux.GetNickname();
            string  password   = aux.GetPassword();
            string  correo     = aux.GetCorreo();
            NodoAVL nuevo      = new NodoAVL(usuario, password, correo);
            NodoAVL padrenuevo = null;
            NodoAVL actual     = this.GetRaiz();

            if (GetRaiz() == null)
            {
                this.raiz = nuevo;
            }
            else
            {
                if (!ExisteContacto(usuario))
                {
                    while (actual != null)
                    {
                        padrenuevo = actual;
                        if (actual.GetUsuario().CompareTo(usuario) > 0)
                        {
                            actual = actual.GetHijoIzquierdo();
                        }
                        else
                        {
                            actual = actual.GetHijoDerecho();
                        }
                    }
                    if (padrenuevo.GetUsuario().CompareTo(usuario) > 0)
                    {
                        padrenuevo.SetHijoIzquierdo(nuevo);
                        nuevo.SetPadre(padrenuevo);
                        EquilibrarArbol(padrenuevo, "izquierda", true);
                    }
                    else
                    {
                        padrenuevo.SetHijoDerecho(nuevo);
                        nuevo.SetPadre(padrenuevo);
                        EquilibrarArbol(padrenuevo, "derecha", true);
                    }
                }
            }
        }
Esempio n. 3
0
 public bool ExisteContacto(string usuario)
 {
     if (GetRaiz() != null)
     {
         NodoAVL aux = this.raiz;
         while (aux != null)
         {
             if (aux.GetUsuario() == usuario)
             {
                 return(true);
             }
             if (aux.GetUsuario().CompareTo(usuario) > 0)
             {
                 aux = aux.GetHijoIzquierdo();
             }
             else
             {
                 aux = aux.GetHijoDerecho();
             }
         }
     }
     return(false);
 }
Esempio n. 4
0
        private void RotacionSimple(NodoAVL nodo, NodoAVL padre, string tipo)
        {
            if (tipo == "derecha")
            {
                NodoAVL hijoizq    = nodo.GetHijoIzquierdo();
                NodoAVL hijoizqder = hijoizq.GetHijoDerecho();
                if (padre != null)
                {
                    if (padre.GetHijoDerecho() == nodo)
                    {
                        padre.SetHijoDerecho(hijoizq);
                    }
                    else
                    {
                        padre.SetHijoIzquierdo(hijoizq);
                    }
                }
                else
                {
                    this.raiz = hijoizq;
                }
                nodo.SetHijoIzquierdo(hijoizqder);
                hijoizq.SetHijoDerecho(nodo);
                nodo.SetPadre(hijoizq);
                if (hijoizqder != null)
                {
                    hijoizqder.SetPadre(nodo);
                }
                hijoizq.SetPadre(padre);
                nodo.SetFe(0);
                hijoizq.SetFe(0);
            }
            else
            {
                NodoAVL hijoder    = nodo.GetHijoDerecho();
                NodoAVL hijoderizq = hijoder.GetHijoIzquierdo();
                if (padre != null)
                {
                    if (padre.GetHijoDerecho() == nodo)
                    {
                        padre.SetHijoDerecho(hijoder);
                    }
                    else
                    {
                        padre.SetHijoIzquierdo(hijoder);
                    }
                }
                else
                {
                    this.raiz = hijoder;
                }

                nodo.SetHijoDerecho(hijoderizq);
                hijoder.SetHijoIzquierdo(nodo);
                nodo.SetPadre(hijoder);
                if (hijoderizq != null)
                {
                    hijoderizq.SetPadre(nodo);
                }
                hijoder.SetPadre(padre);
                hijoder.SetFe(0);
                nodo.SetFe(0);
            }
        }
Esempio n. 5
0
        private void EquilibrarArbol(NodoAVL nodo, string lado, bool nuevo)
        {
            bool salir = false;

            while (nodo != null && !salir)
            {
                if (nuevo)
                {
                    if (lado == "izquierda")
                    {
                        int auxfe = nodo.GetFe();
                        auxfe -= 1;
                        nodo.SetFe(auxfe);
                    }
                    else
                    {
                        int auxfe = nodo.GetFe();
                        auxfe += 1;
                        nodo.SetFe(auxfe);
                    }
                }
                else
                {
                    if (lado == "izquierda")
                    {
                        int auxfe = nodo.GetFe();
                        auxfe += 1;
                        nodo.SetFe(auxfe);
                    }
                    else
                    {
                        int auxfe = nodo.GetFe();
                        auxfe -= 1;
                        nodo.SetFe(auxfe);
                    }
                }
                if (nodo.GetFe() == 0)
                {
                    salir = true;
                }
                else if (nodo.GetFe() == -2)
                {
                    if (nodo.GetHijoIzquierdo().GetFe() == 1)
                    {
                        RotacionDoble(nodo, nodo.GetPadre(), "derecha");
                    }
                    else
                    {
                        RotacionSimple(nodo, nodo.GetPadre(), "derecha");
                    }
                    salir = true;
                }
                else if (nodo.GetFe() == 2)
                {
                    if (nodo.GetHijoDerecho().GetFe() == -1)
                    {
                        RotacionDoble(nodo, nodo.GetPadre(), "izquierda");
                    }
                    else
                    {
                        RotacionSimple(nodo, nodo.GetPadre(), "izquierda");
                    }
                    salir = true;
                }
                if (nodo.GetPadre() != null)
                {
                    if (nodo.GetPadre().GetHijoDerecho() == nodo)
                    {
                        lado = "derecha";
                    }
                    else
                    {
                        lado = "izquierda";
                    }
                }
                nodo = nodo.GetPadre();
            }
        }