コード例 #1
0
ファイル: Nodo Arbol.cs プロジェクト: sancas/ProgramacionIV
 //Constructor con parametros
 public Nodo_Arbol(int nueva_info, Nodo_Arbol izquierdo, Nodo_Arbol derecho, Nodo_Arbol padre)
 {
     this.info = nueva_info;
     this.Izquierdo = izquierdo;
     this.Derecho = derecho;
     this.Padre = padre;
     altura = 0;
 }
コード例 #2
0
ファイル: Nodo Arbol.cs プロジェクト: sancas/ProgramacionIV
 //Constructor con parametros
 public Nodo_Arbol(int nueva_info, Nodo_Arbol subArbol, Nodo_Arbol padre)
 {
     this.info = nueva_info;
     this.subArboles.Add(subArbol);
     //this.Izquierdo = izquierdo;
     //this.Derecho = derecho;
     this.Padre = padre;
     altura = 0;
 }
コード例 #3
0
 //Funcion para calcular altura
 public int calcularAltura(Nodo_Arbol Raiz)
 {
     int h, h_aux;
     if (Raiz == null)
         return 0;
     h = 0;
     if (Raiz.Izquierdo != null)
         h = 1 + calcularAltura(Raiz.Izquierdo);
     if (Raiz.Derecho != null)
     {
         h_aux = 1 + calcularAltura(Raiz.Derecho);
         if (h_aux > h)
             h = h_aux;
     }
     return h;
 }
コード例 #4
0
     //Funcion para colorear los nodos
     public void colorear(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente,
 Pen Lapiz, Nodo_Arbol Raiz, bool post, bool inor, bool preor)
     {
         Brush entorno = Brushes.Red;
         if (inor == true)
         {
             if (Raiz != null)
             {
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor);
                 Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                 Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                 Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor);
             }
         }
         else if (preor == true)
         {
             if (Raiz != null)
             {
                 Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                 Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                 Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor);
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor);
             }
         }
         else if (post == true)
         {
             if (Raiz != null)
             {
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor);
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor);
                 Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                 Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                 Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);
             }
         }
     }
コード例 #5
0
     //Funcion para colorear los nodos
     public void colorear(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente,
 Pen Lapiz, Nodo_Arbol Raiz, bool post, bool inor, bool preor)
     {
         Brush entorno = Brushes.Red;
         if (inor == true) //Si es recorrido en orden
         {
             if (Raiz != null) //Si la raiz no es null
             {
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor); //Se colorea el nodo izquiero
                 Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); //Se colorea la raiz
                 Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                 Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz); //Se vuelve a colorear la raiz
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor); //Se colorea el nodo derecho
             }
         }
         else if (preor == true) //Si es recorrido pre orden
         {
             if (Raiz != null) //Si la raiz no es null
             {
                 Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); //Se colorea la raiz
                 Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                 Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz); //Se colorea la raiz
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor); //Se colorea el nodo izquierdo
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor); //Se colorea el nodo derecho
             }
         }
         else if (post == true) //Si es recorrido post orden
         {
             if (Raiz != null) //Si la raiz no es null
             {
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor, preor); //Se colorea el nodo izquiero
                 colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor, preor); //Se colorea el nodo derecho
                 Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); //Se colorea la raiz
                 Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                 Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz); //Se colorea la raiz
             }
         }
     }
コード例 #6
0
ファイル: Nodo Arbol.cs プロジェクト: sancas/ProgramacionIV
 //Final de la funcion Eliminar
 //Funcion para recorrer el Arbol Binario (busqueda de un nodo)
 public void buscar(int x, Nodo_Arbol t)
 {
     if (t != null)
     {
         if(x < t.info)
         {
             buscar(x, t.Izquierdo);
         }
         else
         {
             if (x > t.info)
             {
                 buscar(x, t.Derecho);
             }
             else
                 MessageBox.Show("El Nodo SI existe", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
     }
     else
     {
         MessageBox.Show("Nodo NO Encontrado en el Arbol", "Error de Busqueda", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
     }
 }
コード例 #7
0
 //Constructor con parametros
 public Arbol_Binario(Nodo_Arbol nueva_raiz)
 {
     Raiz = nueva_raiz;
 }
コード例 #8
0
 //Constructor por defecto
 public Arbol_Binario()
 {
     aux = new Nodo_Arbol();
 }
コード例 #9
0
        /*
         *
         * Funciones para la sumataria de valores del arbol
         *
         * */
        //Funcion que suma los valores del arbol con un modulo especifico
        public void sumar(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente,
    Pen Lapiz, Nodo_Arbol Raiz, int modulo)
        {
            Nodo_Arbol actual = Raiz;
            Brush entorno = Brushes.Red;
            frmPrincipal myForm = new frmPrincipal();

            if (Raiz != null)
            {
                sumar(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, modulo);
                if(Raiz.info%modulo == 0)
                {
                    Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                }
                sumar(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, modulo);
            }
        }
コード例 #10
0
        //Funcion para calcular que nodo se ha tocado con el mouse y resaltarlo, regresa el valor del nodo
        public int seleccionar(Graphics grafo, Font fuente, Brush RellenoFuente, Pen Lapiz, Nodo_Arbol Raiz, Point Referencia)
        {
            Nodo_Arbol actual = Raiz;
            Brush entorno = Brushes.Red;

            while (actual != null) //Mientras el nodo actual no sea null
            {
                int diferenciaX = Referencia.X - actual.nodo.X; //Diferencia en X entre el puntero y el nodo actual
                int diferenciaY = Referencia.Y - actual.nodo.Y; //Diferencia en Y entre el puntero y el nodo actual

                if (diferenciaX > 0 && diferenciaX < 30 && diferenciaY > 0 && diferenciaY < 30) //0>x<30 y 0>y<30 Si el puntero esta a 30 px maximo del nodo
                {
                    actual.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); //Se colorea el nodo actual
                    return actual.info; //Se regresa el valor del nodo
                }
                else if (diferenciaX > 0) actual = actual.Derecho; //Si la diferencia en 'x' es mayor a 0 actual es el nodo derecho
                else if (diferenciaX < 0) actual = actual.Izquierdo; //Si la difrencia en 'x' es menor a 0 actual es el nodo izquierdo
            }
            return 100;
        }
コード例 #11
0
        //Funcion para hacer resaltar un nodo si es que existe
        public void resaltar(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente,
    Pen Lapiz, Nodo_Arbol Raiz, int x)
        {
            Nodo_Arbol actual = Raiz;
            Brush entorno = Brushes.Red;

            while (actual != null) //Mientras el nodo actual no sea null
            {
                if (x == actual.info) //Si el valor del nodo raiz es igual al actual
                {
                    actual.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz); //Se resalta el nodo coloreandolo
                    break;
                }
                else if (x < actual.info) actual = actual.Izquierdo;
                else if (x > actual.info) actual = actual.Derecho;
            }
        }
コード例 #12
0
 //Funcion para agregar un nuevo nodo (valor) al Arbol Binario
 public void Insertar(int x)
 {
     if (Raiz == null)
     {
         Raiz = new Nodo_Arbol(x, null, null, null);
         Raiz.nivel = 0;
     }
     else
     {
         Raiz = Raiz.Insertar(x, Raiz, Raiz.nivel);
     }
 }
コード例 #13
0
        //Funcion para ver si existe un nodo en el Arbol Binario
        public bool existe(int x, Nodo_Arbol Raiz)
        {
            Nodo_Arbol actual = Raiz;

            while (actual != null)
            {
                if (x == actual.info) return true;
                else if (x < actual.info) actual = actual.Izquierdo;
                else if (x > actual.info) actual = actual.Derecho;
            }
            return false;
        }
コード例 #14
0
ファイル: Nodo Arbol.cs プロジェクト: sancas/ProgramacionIV
        //Funcion para eliminar un nodo del Arbol Binario
        public void Eliminar(int x, ref Nodo_Arbol t)
        {
            if (t != null) //Si la raiz es distinta de null
            {
                if (x < t.info)         //Si el valor a eliminar es menor que la raiz
                {
                    Eliminar(x, ref t.Izquierdo);
                }
                else
                {
                    if (x > t.info)     //Si el valor a eliminar es mayor que la raiz
                    {
                        Eliminar(x, ref t.Derecho);
                    }
                    else
                    {
                        Nodo_Arbol NodoEliminar = t; //Ya se ubico el nodo que se desea eliminar
                        if (NodoEliminar.Derecho == null) //Se verifica si tiene hijo derecho
                        {
                            t = NodoEliminar.Izquierdo;
                        }
                        else
                        {
                            if (NodoEliminar.Izquierdo == null) //Se verifica si tiene hijo izquiero
                            {
                                t = NodoEliminar.Derecho;
                            }
                            else
                            {
                                if(Alturas(t.Izquierdo) - Alturas(t.Derecho) > 0)
                                {
                                    //Para verificar que hijo pasa a ser nueva raiz del subarbol
                                    Nodo_Arbol AuxiliarNodo = null;
                                    Nodo_Arbol Auxiliar = t.Izquierdo;
                                    bool Bandera = false;

                                    while(Auxiliar.Derecho != null)
                                    {
                                        AuxiliarNodo = Auxiliar;
                                        Auxiliar = Auxiliar.Derecho;
                                        Bandera = true;
                                    }

                                    t.info = Auxiliar.info; //Se crea un nodo temporal
                                    NodoEliminar = Auxiliar;

                                    if(Bandera == true)
                                    {
                                        AuxiliarNodo.Derecho = Auxiliar.Izquierdo;
                                    }
                                    else
                                    {
                                        t.Izquierdo = Auxiliar.Izquierdo;
                                    }
                                }
                                else
                                {
                                    if(Alturas(t.Derecho) - Alturas(t.Izquierdo) > 0)
                                    {
                                        Nodo_Arbol AuxiliarNodo = null;
                                        Nodo_Arbol Auxiliar = t.Derecho;
                                        bool Bandera = false;

                                        while(Auxiliar.Izquierdo != null)
                                        {
                                            AuxiliarNodo = Auxiliar;
                                            Auxiliar = Auxiliar.Izquierdo;
                                            Bandera = true;
                                        }

                                        t.info = Auxiliar.info;
                                        NodoEliminar = Auxiliar;

                                        if(Bandera == true)
                                        {
                                            AuxiliarNodo.Izquierdo = Auxiliar.Derecho;
                                        }
                                        else
                                        {
                                            t.Derecho = Auxiliar.Derecho;
                                        }
                                    }
                                    else
                                    {
                                        if (Alturas(t.Derecho) - Alturas(t.Izquierdo) == 0)
                                        {
                                            Nodo_Arbol AuxiliarNodo = null;
                                            Nodo_Arbol Auxiliar = t.Izquierdo;
                                            bool Bandera = false;

                                            while (Auxiliar.Derecho != null)
                                            {
                                                AuxiliarNodo = Auxiliar;
                                                Auxiliar = Auxiliar.Derecho;
                                                Bandera = true;
                                            }

                                            t.info = Auxiliar.info;
                                            NodoEliminar = Auxiliar;

                                            if (Bandera == true)
                                            {
                                                AuxiliarNodo.Derecho = Auxiliar.Izquierdo;
                                            }
                                            else
                                            {
                                                t.Izquierdo = Auxiliar.Izquierdo;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Nodo NO Existe en el Arbol", "Error de Eliminacion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
コード例 #15
0
ファイル: Nodo Arbol.cs プロジェクト: sancas/ProgramacionIV
        //Funcion para insertar un nodo en el Arbol Binario
        public Nodo_Arbol Insertar(int x, Nodo_Arbol t, int Level)
        {
            if (t == null) //Si no hay nodo raiz
            {
                t = new Nodo_Arbol(x, null, null, null);
                t.nivel = Level;
            }
            else if(x < t.info)         //Si el valor a insertar es mayor que la raiz
            {
                Level++;
                t.Izquierdo = Insertar(x, t.Izquierdo, Level);
            }
            else if(x > t.info) //Sino si el valor es menor que la raiz
            {
                Level++;
                t.Derecho = Insertar(x, t.Derecho, Level);
            }
            else //Sino el dato ya existe en el arbol
            {
                MessageBox.Show("Dato Existente en el Arbol", "Error de ingreso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

            return t;
        }
コード例 #16
0
        //Funcion para calcular que nodo se ha tocado con el mouse y resaltarlo, regresa el valor del nodo
        public int seleccionar(Graphics grafo, Font fuente, Brush RellenoFuente, Pen Lapiz, Nodo_Arbol Raiz, Point Referencia)
        {
            Nodo_Arbol actual = Raiz;
            Brush entorno = Brushes.Red;

            while (actual != null)
            {
                int diferenciaX = Referencia.X - actual.nodo.X;
                int diferenciaY = Referencia.Y - actual.nodo.Y;

                if (diferenciaX > 0 && diferenciaX < 30 && diferenciaY > 0 && diferenciaY < 30)
                {
                    actual.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                    return actual.info;
                }
                else if (diferenciaX > 0) actual = actual.Derecho;
                else if (diferenciaX < 0) actual = actual.Izquierdo;
            }
            return 100;
        }
コード例 #17
0
        //Funcion para hacer resaltar un nodo si es que existe
        public void resaltar(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente,
    Pen Lapiz, Nodo_Arbol Raiz, int x)
        {
            Nodo_Arbol actual = Raiz;
            Brush entorno = Brushes.Red;

            while (actual != null)
            {
                if (x == actual.info)
                {
                    actual.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                    break;
                }
                else if (x < actual.info) actual = actual.Izquierdo;
                else if (x > actual.info) actual = actual.Derecho;
            }
        }
コード例 #18
0
ファイル: Nodo Arbol.cs プロジェクト: sancas/ProgramacionIV
 //Funcion para calcular la altura de un nodo en el Arbol Binario
 private static int Alturas(Nodo_Arbol t)
 {
     return t == null ? -1 : t.altura;
 }
コード例 #19
0
 //Funcion para eliminar un nodo (valor) del Arbol Binario
 public void Eliminar(int x)
 {
     if (Raiz == null)
     {
         Raiz = new Nodo_Arbol(x, null, null, null);
     }
     else
     {
         Raiz.Eliminar(x, ref Raiz);
     }
 }
コード例 #20
0
        // Función para Colorear los nodos
        public void colorear(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente,
                             Pen Lapiz, Nodo_Arbol Raiz, bool post, bool inor, bool preor)
        {
            Brush entorno = Brushes.Red;

            if (inor == true)
            {
                if (Raiz != null)
                {
                    colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor,
                             preor);
                    Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);

                    Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                    Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);
                    colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor,
                             preor);
                    //valor += Raiz.Info + ", ";
                }
            }
            else if (preor == true)
            {
                if (Raiz != null)
                {
                    Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);


                    Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                    Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);
                    colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post,
                             inor, preor);
                    colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post,
                             inor, preor);
                    //valor += Raiz.Info + ", ";
                }
            }
            else if (post == true)
            {
                if (Raiz != null)
                {
                    colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post,
                             inor, preor);
                    colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post,
                             inor, preor);
                    Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);


                    Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                    Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);
                    //valor += Raiz.Info + ", ";
                }
            }
            else
            {
                /*colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Izquierdo, post, inor,
                 *  preor);*/
                Raiz.colorear(grafo, fuente, entorno, RellenoFuente, Lapiz);
                valor += Raiz.Info + "";

                Thread.Sleep(1000); // pausar la ejecución 1000 milisegundos
                Raiz.colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz);

                /*colorear(grafo, fuente, Relleno, RellenoFuente, Lapiz, Raiz.Derecho, post, inor,
                 * preor);*/
            }
        }