Пример #1
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);
                    }
                }
            }
        }
Пример #2
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);
            }
        }