コード例 #1
0
        public Hoja <T> rotacionDobDerecha(Hoja <T> valor)
        {
            Hoja <T> aux;

            valor.hojaDerecha = rotacionSimpIzquierda(valor.hojaDerecha);
            aux = rotacionSimpDerecha(valor);
            return(aux);
        }
コード例 #2
0
        public Hoja <T> rotacionSimpDerecha(Hoja <T> valor)
        {
            Hoja <T> aux = valor.hojaDerecha;

            valor.hojaDerecha = aux.hojaIzquierda;
            aux.hojaIzquierda = valor;
            valor.altura      = Math.Max(obtenerFE(valor.hojaIzquierda), obtenerFE(valor.hojaDerecha)) + 1;
            aux.altura        = Math.Max(obtenerFE(aux.hojaIzquierda), obtenerFE(aux.hojaDerecha)) + 1;
            return(aux);
        }
コード例 #3
0
 public int obtenerFE(Hoja <T> x)
 {
     if (x == null)
     {
         return(-1);
     }
     else
     {
         return(x.altura);
     }
 }
コード例 #4
0
        public void Insertar(T value)
        {
            cantidadHojas++;
            Hoja <T> nuevaHoja = new Hoja <T>();

            nuevaHoja.value         = value;
            nuevaHoja.hojaIzquierda = null;
            nuevaHoja.hojaDerecha   = null;
            if (raiz == null)
            {
                raiz = nuevaHoja;
            }
            else
            {
                raiz = insertarAVL(nuevaHoja, raiz);
            }
        }
コード例 #5
0
 public void Busqueda(Hoja <T> r, ref Hoja <T> valorAbuscar, ref bool existe)
 {
     if (r.value.CompareTo(valorAbuscar.value) == 0)
     {
         valorAbuscar = r;
         existe       = true;
     }
     else
     {
         if (r.hojaIzquierda != null)
         {
             Busqueda(r.hojaIzquierda, ref valorAbuscar, ref existe);
         }
         if (r.hojaDerecha != null)
         {
             Busqueda(r.hojaDerecha, ref valorAbuscar, ref existe);
         }
     }
 }
コード例 #6
0
 public AVL()
 {
     raiz   = null;
     existe = false;
 }
コード例 #7
0
        public Hoja <T> insertarAVL(Hoja <T> nuevo, Hoja <T> ArbolSub)
        {
            Hoja <T> nuevoPadre = ArbolSub;

            if (nuevo.value.CompareTo(ArbolSub.value) < 0)
            {
                if (ArbolSub.hojaIzquierda == null)
                {
                    ArbolSub.hojaIzquierda = nuevo;
                }
                else
                {
                    ArbolSub.hojaIzquierda = insertarAVL(nuevo, ArbolSub.hojaIzquierda);
                    if ((obtenerFE(ArbolSub.hojaIzquierda) - obtenerFE(ArbolSub.hojaDerecha) == 2))
                    {
                        if (nuevo.value.CompareTo(ArbolSub.hojaIzquierda.value) < 0)
                        {
                            nuevoPadre = rotacionSimpIzquierda(ArbolSub);
                        }
                        else
                        {
                            nuevoPadre = rotacionDobIzquierda(ArbolSub);
                        }
                    }
                }
            }
            else if (nuevo.value.CompareTo(ArbolSub.value) > 0)
            {
                if (ArbolSub.hojaDerecha == null)
                {
                    ArbolSub.hojaDerecha = nuevo;
                }
                else
                {
                    ArbolSub.hojaDerecha = insertarAVL(nuevo, ArbolSub.hojaDerecha);
                    if ((obtenerFE(ArbolSub.hojaDerecha) - obtenerFE(ArbolSub.hojaIzquierda) == 2))
                    {
                        if (nuevo.value.CompareTo(ArbolSub.hojaDerecha.value) > 0)
                        {
                            nuevoPadre = rotacionSimpDerecha(ArbolSub);
                        }
                        else
                        {
                            nuevoPadre = rotacionDobDerecha(ArbolSub);
                        }
                    }
                }
            }
            else
            {
                //
            }

            if ((ArbolSub.hojaIzquierda == null) && (ArbolSub.hojaDerecha != null))
            {
                ArbolSub.altura = ArbolSub.hojaDerecha.altura + 1;
            }
            else if ((ArbolSub.hojaDerecha == null) && (ArbolSub.hojaIzquierda != null))
            {
                ArbolSub.altura = ArbolSub.hojaIzquierda.altura + 1;
            }
            else
            {
                ArbolSub.altura = Math.Max(obtenerFE(ArbolSub.hojaIzquierda), obtenerFE(ArbolSub.hojaDerecha)) + 1;
            }
            nuevoPadre.FE = (obtenerFE(ArbolSub.hojaIzquierda) - obtenerFE(ArbolSub.hojaDerecha));
            return(nuevoPadre);
        }