Ejemplo n.º 1
0
        //Propiedades



        //Insertar un nuevo valor al AVL
        public AVL Insertar(int valorNuevo, AVL Raiz)
        {
            if (Raiz == null)
            {
                Raiz = new AVL(valorNuevo, null, null, null);
            }
            else if (valorNuevo < Raiz.valor)
            {
                Raiz.NodoIzquierdo = Insertar(valorNuevo, Raiz.NodoIzquierdo);
            }
            else if (valorNuevo > Raiz.valor)
            {
                Raiz.NodoDerecho = Insertar(valorNuevo, Raiz.NodoDerecho);
            }
            else
            {
                MessageBox.Show("Valor existente en el arbol", "Error", MessageBoxButtons.OK);
            }

            //Rotaciones Simples o Dobles segun el caso
            if (Alturas(Raiz.NodoIzquierdo) - Alturas(Raiz.NodoDerecho) == 2)
            {
                if (valorNuevo < Raiz.NodoIzquierdo.valor)
                {
                    Raiz = RotacionIzquierdaSimple(Raiz);
                }
                else
                {
                    Raiz = RotacionIzquierdaDoble(Raiz);
                }
            }
            if (Alturas(Raiz.NodoDerecho) - Alturas(Raiz.NodoIzquierdo) == 2)
            {
                if (valorNuevo > Raiz.NodoDerecho.valor)
                {
                    Raiz = RotacionDerechaSimple(Raiz);
                }
                else
                {
                    Raiz = RotacionDerechaDoble(Raiz);
                }
            }
            Raiz.altura = max(Alturas(Raiz.NodoIzquierdo), Alturas(Raiz.NodoDerecho)) + 1;
            return(Raiz);
        }
Ejemplo n.º 2
0
 public void buscar(int valorBuscar, AVL Raiz)
 {
     if (Raiz != null)
     {
         if (valorBuscar < Raiz.valor)
         {
             buscar(valorBuscar, Raiz.NodoIzquierdo);
         }
         else
         {
             if (valor > Raiz.valor)
             {
                 buscar(valorBuscar, Raiz.NodoDerecho);
             }
         }
     }
     else
     {
     }
     //MessageBox.Show("Valor no encontrado", "Error", MessageBoxButtons.OK);
 }
Ejemplo n.º 3
0
        public void color(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente, Pen Lapiz, AVL Raiz, bool post, bool inor, bool preor)
        {
            Brush entorno = Brushes.Red;

            if (inor == true)
            {
                if (Raiz != null)
                {
                    color(grafo, fuente, Brushes.Red, RellenoFuente, Lapiz, Raiz.NodoIzquierdo, post, inor, preor);
                    Raiz.Colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                    Thread.Sleep(500);
                    Raiz.Colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);
                    color(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.NodoDerecho, post, inor, preor);
                }
            }
            else if (preor == true)
            {
                if (Raiz != null)
                {
                    Raiz.Colorear(grafo, fuente, Brushes.Yellow, Brushes.Red, Pens.Black);
                    Thread.Sleep(500);
                    Raiz.Colorear(grafo, fuente, Brushes.White, Brushes.Black, Pens.Black);
                    color(grafo, fuente, Brushes.Red, RellenoFuente, Lapiz, Raiz.NodoIzquierdo, post, inor, preor);
                    color(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.NodoDerecho, post, inor, preor);
                }
            }
            else if (post == true)
            {
                if (Raiz != null)
                {
                    color(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.NodoIzquierdo, post, inor, preor);
                    color(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.NodoDerecho, post, inor, preor);
                    Raiz.Colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                    Thread.Sleep(500);
                    Raiz.Colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                }
            }
        }
Ejemplo n.º 4
0
 public DibujarAVL(AVL RaizNueva)
 {
     Raiz = RaizNueva;
 }
Ejemplo n.º 5
0
 //Constructor
 public DibujarAVL()
 {
     aux = new AVL();
 }
Ejemplo n.º 6
0
        public void colorearB(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente, Pen Lapiz, AVL Raiz, int busqueda)
        {
            Brush entorno = Brushes.Red;

            if (Raiz != null)
            {
                Raiz.Colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                if (busqueda < Raiz.valor)
                {
                    Thread.Sleep(500);
                    Raiz.Colorear(grafo, fuente, entorno, Brushes.Red, Lapiz);
                    colorearB(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.NodoIzquierdo, busqueda);
                }
                else
                {
                    if (busqueda > Raiz.valor)
                    {
                        Thread.Sleep(500);
                        Raiz.Colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                        colorearB(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.NodoDerecho, busqueda);
                    }
                    else
                    {
                        Raiz.Colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                        Thread.Sleep(500);
                    }
                }
            }
        }
Ejemplo n.º 7
0
 private static int Alturas(AVL Raiz)
 {
     return(Raiz == null ? -1 : Raiz.altura);
 }
Ejemplo n.º 8
0
 //Doble rotacion derecha
 private static AVL RotacionDerechaDoble(AVL k1)
 {
     k1.NodoDerecho = RotacionIzquierdaSimple(k1.NodoDerecho);
     return(RotacionDerechaSimple(k1));
 }
Ejemplo n.º 9
0
 //Doble rotacion izquierda
 private static AVL RotacionIzquierdaDoble(AVL k3)
 {
     k3.NodoIzquierdo = RotacionDerechaSimple(k3.NodoIzquierdo);
     return(RotacionIzquierdaSimple(k3));
 }
Ejemplo n.º 10
0
 public AVL Elimnar(int valorEliminar, ref AVL Raiz)
 {
     if (Raiz != null)
     {
         if (valorEliminar < Raiz.valor)
         {
             nodoE = Raiz;
             Elimnar(valorEliminar, ref Raiz.NodoIzquierdo);
         }
         else
         {
             if (valorEliminar > Raiz.valor)
             {
                 nodoE = Raiz;
                 Elimnar(valorEliminar, ref Raiz.NodoDerecho);
             }
             else
             {
                 //Posocionamiento sobre el elemento a eliminar
                 AVL NodoEliminar = Raiz;
                 if (NodoEliminar.NodoDerecho == null)
                 {
                     Raiz = NodoEliminar.NodoIzquierdo;
                     if (Alturas(nodoE.NodoIzquierdo) - Alturas(nodoE.NodoDerecho) == 2)
                     {
                         if (valorEliminar < nodoE.valor)
                         {
                             nodoP = RotacionIzquierdaSimple(nodoE);
                         }
                         else
                         {
                             nodoE = RotacionDerechaSimple(nodoE);
                         }
                     }
                     if (Alturas(nodoE.NodoDerecho) - Alturas(NodoIzquierdo) == 2)
                     {
                         if (valorEliminar > nodoE.NodoDerecho.valor)
                         {
                             nodoE = RotacionDerechaSimple(nodoE);
                         }
                         else
                         {
                             nodoE = RotacionDerechaDoble(nodoE);
                         }
                         nodoP = RotacionDerechaSimple(nodoE);
                     }
                 }
                 else
                 {
                     if (NodoEliminar.NodoIzquierdo == null)
                     {
                         Raiz = NodoEliminar.NodoDerecho;
                     }
                     else
                     {
                         if (Alturas(Raiz.NodoIzquierdo) - Alturas(Raiz.NodoDerecho) > 0)
                         {
                             AVL  AuxiliarNodo = null;
                             AVL  Auxiliar     = Raiz.NodoIzquierdo;
                             bool Bandera      = false;
                             while (Auxiliar.NodoDerecho != null)
                             {
                                 AuxiliarNodo = Auxiliar;
                                 Auxiliar     = Auxiliar.NodoDerecho;
                                 Bandera      = true;
                             }
                             Raiz.valor   = Auxiliar.valor;
                             NodoEliminar = Auxiliar;
                             if (Bandera == true)
                             {
                                 AuxiliarNodo.NodoDerecho = Auxiliar.NodoIzquierdo;
                             }
                             else
                             {
                                 Raiz.NodoIzquierdo = Auxiliar.NodoIzquierdo;
                             }
                             //Realiza las rotaciones simples o dobles segun el caso
                         }
                         else
                         {
                             if (Alturas(Raiz.NodoDerecho) - Alturas(Raiz.NodoIzquierdo) > 0)
                             {
                                 AVL  AuxiliarNodo = null;
                                 AVL  Auxiliar     = Raiz.NodoDerecho;
                                 bool Bandera      = false;
                                 while (Auxiliar.NodoIzquierdo != null)
                                 {
                                     AuxiliarNodo = Auxiliar;
                                     Auxiliar     = Auxiliar.NodoIzquierdo;
                                     Bandera      = true;
                                 }
                                 Raiz.valor   = Auxiliar.valor;
                                 NodoEliminar = Auxiliar;
                                 if (Bandera == true)
                                 {
                                     AuxiliarNodo.NodoIzquierdo = Auxiliar.NodoDerecho;
                                 }
                                 else
                                 {
                                     Raiz.NodoDerecho = Auxiliar.NodoDerecho;
                                 }
                             }
                             else
                             {
                                 if (Alturas(Raiz.NodoDerecho) - Alturas(Raiz.NodoIzquierdo) > 0)
                                 {
                                     AVL  AuxiliarNodo = null;
                                     AVL  Auxiliar     = Raiz.NodoIzquierdo;
                                     bool Bandera      = false;
                                     while (Auxiliar.NodoDerecho != null)
                                     {
                                         AuxiliarNodo = Auxiliar;
                                         Auxiliar     = Auxiliar.NodoDerecho;
                                         Bandera      = true;
                                     }
                                     Raiz.valor   = Auxiliar.valor;
                                     NodoEliminar = Auxiliar;
                                     if (Bandera == true)
                                     {
                                         AuxiliarNodo.NodoDerecho = Auxiliar.NodoIzquierdo;
                                     }
                                     else
                                     {
                                         Raiz.NodoIzquierdo = Auxiliar.NodoIzquierdo;
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     else
     {
         MessageBox.Show("Nodo inexistente en el arbol", "Error", MessageBoxButtons.OK);
     }
     return(nodoP);
 }