Ejemplo n.º 1
0
 public NodoAvl borrarEnAvl(NodoAvl raiz, string nickname, ref int altura)
 {
     if (raiz == null)
     {
         altura = 0;
     }
     else if (string.Compare(nickname, raiz.getNickname()) == -1)
     {
         raiz.izq = borrarEnAvl(raiz.izq, nickname, ref altura);
         if (altura != 0)
         {
             raiz = equilibrar1(raiz, ref altura);
         }
     }
     else if (string.Compare(nickname, raiz.getNickname()) == 1)
     {
         raiz.der = borrarEnAvl(raiz.der, nickname, ref altura);
         if (altura != 0)
         {
             raiz = equilibrar2(raiz, ref altura);
         }
     }
     else
     {   //Nodo Encontrado
         NodoAvl aux;
         aux = raiz;
         if (aux.izq == null)
         {
             raiz   = aux.der;
             altura = 1;
         }
         else if (aux.der == null)
         {
             raiz   = aux.izq;
             altura = 1;
         }
         else
         {
             reemplazar(ref aux, ref aux.izq, ref altura);
             if (altura != 0)
             {
                 raiz = equilibrar1(raiz, ref altura);
             }
         }
     }
     return(raiz);
 }
Ejemplo n.º 2
0
        public NodoAvl insertarAvl(NodoAvl raiz, NodoAvl nuevo, ref int h)
        {
            NodoAvl n1;

            if (raiz == null)
            {
                raiz = nuevo;
                h    = 1;
            }
            else if (string.Compare(nuevo.getNickname(), raiz.getNickname()) == -1)
            {
                raiz.izq = insertarAvl(raiz.izq, nuevo, ref h);
                //reduce 1 al fe porque crecio en la rama izquierda
                if (h != 0)
                {
                    switch (raiz.getFe())
                    {
                    case 1:
                        raiz.setFe(0);
                        h = 0;
                        break;

                    case 0:
                        raiz.setFe(-1);
                        break;

                    case -1:
                        n1 = raiz.izq;
                        if (n1.getFe() == -1)
                        {
                            raiz = rotacionSimpleIzq(raiz, n1);
                        }
                        else
                        {
                            raiz = rotacionID(raiz, n1);
                        }
                        h = 0;
                        break;
                    }
                }
            }
            else if (string.Compare(nuevo.getNickname(), raiz.getNickname()) == 1)
            {
                raiz.der = insertarAvl(raiz.der, nuevo, ref h);
                if (h != 0)
                {
                    switch (raiz.getFe())
                    {
                    case 1:
                        n1 = raiz.der;
                        if (n1.getFe() == 1)
                        {
                            raiz = rotacionSimpleDer(raiz, n1);
                        }
                        else
                        {
                            raiz = rotacionDI(raiz, n1);
                        }
                        h = 0;
                        break;

                    case 0:
                        raiz.setFe(1);
                        break;

                    case -1:
                        raiz.setFe(0);
                        h = 0;
                        break;
                    }
                }
            }
            else
            {
                h = 0;
            }
            return(raiz);
        }