Ejemplo n.º 1
0
 public NodoArbol()
 {
     derecho   = null;
     izquierdo = null;
 }
Ejemplo n.º 2
0
 public NodoLista(NodoArbol arbol, string nombre)
 {
     this.Arbol  = arbol;
     this.Nombre = nombre;
 }
Ejemplo n.º 3
0
 public bool Vacio(NodoArbol r)
 {
     return(r == null);
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Menu para arboles que no contienen datos enteros
        /// </summary>
        /// <param name="node">Arbol el cual se va manipular</param>
        /// <param name="nombre">nombre del arbol para mostrar al usuario</param>
        static public void MenuMostrar_C1(NodoArbol node, string nombre)
        {
            bool rep = false;

            do
            {
                Console.Clear();
                Console.Title = $"Arbol {nombre}";
                Console.WriteLine("1.- Mostrar Datos del Arbol");
                Console.WriteLine("2.- Recorrido PreOrden");
                Console.WriteLine("3.- Recorrido InOrden");
                Console.WriteLine("4.- Recorrido PostOrden");
                Console.WriteLine("5.- Salir del menu actual");
                Console.WriteLine("6.- Salir del programa");

                try
                {
                    switch (int.Parse(Console.ReadLine()))
                    {
                    case 1:
                        ABB.Transversa(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 2:
                        Recorridos.PreOrden(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 3:
                        Recorridos.InOrden(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 4:
                        Recorridos.PostOrden(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 5:
                        rep = false;
                        break;

                    case 6:
                        Environment.Exit(0);
                        break;

                    default:
                        Console.WriteLine("Elija una opcion valida");
                        rep = true;
                        break;
                    }
                }
                catch (System.FormatException)
                {
                    Console.WriteLine("Ingrese un valor numerico");
                    rep = true;
                }
            } while (rep);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Menu en caso de todos los datos del arbol sean enteros
        /// </summary>
        /// <param name="node">Arbol el cual se va manipular</param>
        /// <param name="nombre">nombre del arbol para mostrar al usuario</param>
        static public void MenuMostrar_C2(ref NodoArbol node, string nombre)
        {
            bool rep = false;

            do
            {
                Console.Clear();
                Console.Title = $"Arbol {nombre}";
                Console.WriteLine("1.- Mostrar Datos del Arbol");
                Console.WriteLine("2.- Insertar nodo");
                Console.WriteLine("3.- Eliminar nodo");
                Console.WriteLine("4.- Buscar nodo en el arbol");
                Console.WriteLine("5.- Buscar padre");
                Console.WriteLine("6.- Recorrido PreOrden");
                Console.WriteLine("7.- Recorrido InOrden");
                Console.WriteLine("8.- Recorrido PostOrden");
                Console.WriteLine("9.- Salir del Menu Actual");
                Console.WriteLine("10.- Salir del Programa");

                try
                {
                    switch (int.Parse(Console.ReadLine()))
                    {
                    case 1:
                        Console.Clear();
                        ABB.Transversa(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 2:
                        var valor = MenuInsercionInt();
                        node = ABB.Insertar(valor, node);
                        rep  = true;
                        break;

                    case 3:
                        Console.WriteLine("Que valor desea eliminar?");
                        ABB.BorrarNodo(int.Parse(Console.ReadLine()), node);
                        rep = true;
                        break;

                    case 4:
                        Console.Clear();

                        Console.Write("Valor a buscar: \t");
                        int valor2 = int.Parse(Console.ReadLine());

                        if (Recorridos.Resultado_Buscar(node, valor2))
                        {
                            NodoArbol nodoBuscado = Recorridos.Buscar(node, valor2);
                            string    mensaje     = $"El elemento {nodoBuscado.Valor} si existe; ";

                            if (nodoBuscado.Izq != null)
                            {
                                mensaje += $"su hijo izquierdo es {nodoBuscado.Izq.Valor}";
                            }
                            else
                            {
                                mensaje += "su hijo izquierdo es null";
                            }

                            if (nodoBuscado.Der != null)
                            {
                                mensaje += $", su hijo derecho es {nodoBuscado.Der.Valor}";
                            }
                            else
                            {
                                mensaje += $", su hijo derecho es null";
                            }

                            Console.WriteLine(mensaje);
                        }
                        else
                        {
                            Console.WriteLine("El elemento no existe");
                        }

                        Console.ReadKey();

                        rep = true;
                        break;

                    case 5:
                        Console.Clear();
                        Console.Write("Valor a evaluar: \t");
                        int valor3 = int.Parse(Console.ReadLine());

                        if (Recorridos.Resultado_Buscar(node, valor3))
                        {
                            NodoArbol result = ABB.BuscarPadre(valor3, node);

                            if (result == null)
                            {
                                Console.WriteLine($"El valor {valor3} es la raiz");
                            }
                            else
                            {
                                Console.WriteLine($"El padre de {valor3} es {result.Valor}");
                            }
                        }
                        else
                        {
                            Console.WriteLine("El elemento no existe");
                        }

                        Console.ReadKey();
                        rep = true;
                        break;


                    case 6:
                        Recorridos.PreOrden(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 7:
                        Recorridos.InOrden(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 8:
                        Recorridos.PostOrden(node);
                        System.Threading.Thread.Sleep(2000);
                        rep = true;
                        break;

                    case 9:
                        rep = false;
                        break;

                    case 10:
                        Environment.Exit(0);
                        break;

                    default:
                        Console.WriteLine("Ingrese una opcion valida");
                        rep = true;
                        break;
                    }
                }
                catch (System.FormatException)
                {
                    Console.WriteLine("Ingrese un valor numerico");
                }
            } while (rep);
        }
Ejemplo n.º 6
0
 public System.IO.TextWriter semantError(NodoArbol t, String mensaje)
 {
     errorStream.WriteLine("Error en línea " + t.Linea + ":" + t.Columna + ": " + mensaje);
     return(semantError());
 }
Ejemplo n.º 7
0
    public void Eliminar(String nickname)
    {
        NodoArbol n = Buscar(nickname, Raiz);

        if (n != null)
        {
            if (n.Der == null && n.Izq == null)
            {
                if (n == this.Raiz)
                {
                    this.Raiz = null;
                }
                else
                {
                    if (n.Padre.Der == n)
                    {
                        n.Padre.Der = null;
                    }
                    else
                    {
                        n.Padre.Izq = null;
                    }
                }
            }
            else if (n.Der == null && n.Izq != null)
            {
                if (n.Padre == null)
                {
                    this.Raiz = n.Izq;
                }
                else
                {
                    if (n.Padre.Der == n)
                    {
                        n.Padre.Der = n.Izq;
                    }
                    else
                    {
                        n.Padre.Izq = n.Izq;
                    }
                }
            }
            else if (n.Der != null & n.Izq == null)
            {
                if (n.Padre == null)
                {
                    this.Raiz = n.Der;
                }
                else
                {
                    if (n.Padre.Der == n)
                    {
                        n.Padre.Der = n.Der;
                    }
                    else
                    {
                        n.Padre.Izq = n.Der;
                    }
                }
            }
            else
            {
                //AMBOS NODOS ESTAN LLENOS
                NodoArbol aux = n.Der;
                while (aux.Izq != null)
                {
                    aux = aux.Izq;
                }
                if (aux.Der != null)
                {
                    if (aux.Padre != n)
                    {
                        aux.Padre.Izq = aux.Der;
                        aux.Der.Padre = aux.Padre;
                    }
                    else
                    {
                        aux.Padre.Der = aux.Der;
                        aux.Der.Padre = aux.Padre;
                    }
                }
                else
                {
                    if (aux.Padre != n)
                    {
                        aux.Padre.Izq = null;
                    }
                    else
                    {
                        aux.Padre.Der = null;
                    }
                }
                //Si es la Raiz
                if (n.Padre == null)
                {
                    Raiz      = aux;
                    aux.Padre = null;
                    aux.Izq   = n.Izq;
                    aux.Der   = n.Der;
                    if (n.Izq != null)
                    {
                        n.Izq.Padre = aux;
                    }

                    if (n.Der != null)
                    {
                        n.Der.Padre = aux;
                    }
                }
                else
                {
                    aux.Izq = n.Izq;
                    aux.Der = n.Der;
                    if (n.Izq != null)
                    {
                        n.Izq.Padre = aux;
                    }

                    if (n.Der != null)
                    {
                        n.Der.Padre = aux;
                    }

                    if (n.Padre.Der == n)
                    {
                        n.Padre.Der = aux;
                    }
                    else
                    {
                        n.Padre.Izq = aux;
                    }
                }
            }
        }
    }
Ejemplo n.º 8
0
 public System.IO.TextWriter semantError(NodoArbol t)
 {
     errorStream.WriteLine(t.Linea + ":" + t.Columna + ": ");
     return(semantError());
 }
Ejemplo n.º 9
0
        public void Eliminar(string nuevaLlave)
        {
            NodoArbol <T> anterior = null, actual;

            actual = raiz;
            while (actual != null)
            {
                if (actual.Llave == nuevaLlave)
                {
                    break;
                }
                anterior = actual;
                if (nuevaLlave.CompareTo(actual.Llave) == -1)
                {
                    actual = actual.izquierda;
                }
                else
                {
                    actual = actual.derecha;
                }
            }

            if (actual.izquierda == null && actual.derecha == null)
            {
                if (nuevaLlave.CompareTo(anterior.Llave) == -1)
                {
                    anterior.izquierda = null;
                }
                else
                {
                    anterior.derecha = null;
                }
            }

            else if (actual.izquierda != null || actual.derecha != null)
            {
                if (actual.izquierda != null)
                {
                    if (nuevaLlave.CompareTo(anterior.Llave) == -1)
                    {
                        anterior.izquierda = actual.izquierda;
                    }
                    else
                    {
                        anterior.derecha = actual.izquierda;
                    }
                }
                else
                {
                    if (nuevaLlave.CompareTo(anterior.Llave) == -1)
                    {
                        anterior.izquierda = actual.derecha;
                    }
                    else
                    {
                        anterior.derecha = actual.derecha;
                    }
                }
            }

            else
            {
                NodoArbol <T> temp = new NodoArbol <T>();
                temp = actual.derecha;
                while (temp.izquierda != null)
                {
                    anterior = temp;
                    temp     = temp.izquierda;
                }

                actual = temp;

                if (temp.izquierda != null)
                {
                    if (nuevaLlave.CompareTo(anterior.Llave) == -1)
                    {
                        anterior.izquierda = temp.izquierda;
                    }
                    else
                    {
                        anterior.derecha = temp.izquierda;
                    }
                }
                else
                {
                    if (nuevaLlave.CompareTo(anterior.Llave) == -1)
                    {
                        anterior.izquierda = temp.derecha;
                    }
                    else
                    {
                        anterior.derecha = temp.derecha;
                    }
                }
            }

            //Metodo de busqueda por ID que se obtenga de la lista
            NodoArbol <T> Buscar(int identificador, NodoArbol <T> r)
            {
                if (raiz == null)
                {
                    return(null);
                }
                else if (r.Id != identificador)
                {
                    return(r);
                }
                else if (r.Id < identificador)
                {
                    return(Buscar(identificador, r.derecha));
                }
                else
                {
                    return(Buscar(identificador, r.izquierda));
                }
            }
        }
Ejemplo n.º 10
0
 public ArbolAVL()
 {
     raiz = null;
 }
Ejemplo n.º 11
0
        //procedimiento recursivo que genera el arbol
        private void generar(NodoArbol nodoActual)
        {
            //Valido nodos nulos para evitar incluir condicionales en generacion de nodos cuando es nulo
            if (nodoActual == null)
            {
                return;
            }

            if (nodoActual.GetType() == typeof(Programa))
            {
                Programa n = (Programa)nodoActual;
                generar(n.Sentencias);
            }
            else if (nodoActual.GetType() == typeof(ListaSentencia))
            {
                ListaSentencia ls = (ListaSentencia)nodoActual;
                foreach (Sentencia sent in ls.getLista())
                {
                    generar(sent);
                }
            }
            else if (nodoActual.GetType() == typeof(Condicional))
            {
                Emit.LocalBuilder tmpVarLogico;
                Condicional       n = (Condicional)nodoActual;

                generar(n.Condicion);

                this.il.Emit(Emit.OpCodes.Ldc_I4_0); //Ingreso constante 0
                this.il.Emit(Emit.OpCodes.Ceq);      //Comparo si es falso (es 0)
                //Almaceno este resultado en una variable temporal
                tmpVarLogico = this.il.DeclareLocal(typeof(bool));
                this.il.Emit(Emit.OpCodes.Stloc, tmpVarLogico);
                //cargo el resultado de la variable temporal
                this.il.Emit(Emit.OpCodes.Ldloc, tmpVarLogico);
                Emit.Label bloqueFalso = this.il.DefineLabel();
                //salto en caso que sea verdadero el resultado es decir es cero la evaluacion del (pila==0) hago el sino
                this.il.Emit(Emit.OpCodes.Brtrue, bloqueFalso);

                generar(n.Entonces);

                Emit.Label finSi = this.il.DefineLabel();
                this.il.Emit(Emit.OpCodes.Br, finSi);
                this.il.MarkLabel(bloqueFalso);

                generar(n.Sino);

                this.il.MarkLabel(finSi);
            }
            else if (nodoActual.GetType() == typeof(RepitaHasta))
            {
                RepitaHasta       n = (RepitaHasta)nodoActual;
                Emit.LocalBuilder tmpCondicion;
                tmpCondicion = this.il.DeclareLocal(typeof(bool));
                Emit.Label sentenciasRepita = this.il.DefineLabel();
                this.il.MarkLabel(sentenciasRepita);
                this.il.Emit(Emit.OpCodes.Nop);         //emito primera sentencia vacia

                generar(n.Sentencias);

                generar(n.Condicion);

                this.il.Emit(Emit.OpCodes.Stloc, tmpCondicion);  //almaceno resultado de condicion del mientras
                this.il.Emit(Emit.OpCodes.Ldloc, tmpCondicion);  //cargo resultado de condicion del mientras
                this.il.Emit(Emit.OpCodes.Brfalse, sentenciasRepita);
            }
            else if (nodoActual.GetType() == typeof(Asignacion))
            {
                Asignacion n = (Asignacion)nodoActual;

                generar(n.Expr);

                Almacenar(n.Id.Nombre.Texto, this.il);
            }
            else if (nodoActual.GetType() == typeof(LLamadaFuncion)) //Leer, Escribir
            {
                LLamadaFuncion    n    = (LLamadaFuncion)nodoActual;
                List <FuncionDef> funs = NucleoLenguaje.Instancia.getFuncBasicas();
                //En la lista de definiciones de funciones estandar busco la definicion de la llamada para funcion deseada
                foreach (FuncionDef fun in funs)
                {
                    if (n.Id.Texto.Equals(fun.Nombre.Texto))
                    {
                        fun.ejecutarMetodo(il, n.Params);
                    }
                }
            }
            else if (nodoActual.GetType() == typeof(NumeroEntero))
            {
                NumeroEntero n = (NumeroEntero)nodoActual;
                this.il.Emit(Emit.OpCodes.Ldc_I4, convertir_a_entero(n.Token.Texto));
            }
            else if (nodoActual.GetType() == typeof(Variable))
            {
                Variable n = (Variable)nodoActual;
                if (!TablaDireccionesSimbolos.ContainsKey(n.Nombre.Texto))
                {
                    throw new System.Exception("ERROR-0008 fallo en analisis semantico Variable no declarada encontrada durante generacion '" + n.Nombre.Texto + "'");
                }
                else
                {
                    this.il.Emit(Emit.OpCodes.Ldloc, TablaDireccionesSimbolos[n.Nombre.Texto]);
                }
            }
            else if (nodoActual.GetType() == typeof(Suma))
            {
                Suma n = (Suma)nodoActual;
                generar(n.ExprIzq);
                generar(n.ExprDer);
                this.il.Emit(Emit.OpCodes.Add);
            }
            else if (nodoActual.GetType() == typeof(Resta))
            {
                Resta n = (Resta)nodoActual;
                generar(n.ExprIzq);
                generar(n.ExprDer);
                this.il.Emit(Emit.OpCodes.Sub);
            }
            else if (nodoActual.GetType() == typeof(Multiplicacion))
            {
                Multiplicacion n = (Multiplicacion)nodoActual;
                generar(n.ExprIzq);
                generar(n.ExprDer);
                this.il.Emit(Emit.OpCodes.Mul);
            }
            else if (nodoActual.GetType() == typeof(Division))
            {
                Division n = (Division)nodoActual;
                generar(n.ExprIzq);
                generar(n.ExprDer);
                this.il.Emit(Emit.OpCodes.Div);
            }
            else if (nodoActual.GetType() == typeof(Menor))
            {
                Menor n = (Menor)nodoActual;
                generar(n.ExprIzq);
                generar(n.ExprDer);
                this.il.Emit(Emit.OpCodes.Clt);
            }
            else if (nodoActual.GetType() == typeof(Igual))
            {
                Igual n = (Igual)nodoActual;
                generar(n.ExprIzq);
                generar(n.ExprDer);
                this.il.Emit(Emit.OpCodes.Ceq);
            }
            else
            {
                Console.WriteLine("ERROR-0006 Error tipo de Nodo no identificado");
            }
        }
Ejemplo n.º 12
0
        static void Main(string[] args)
        {
            do
            {
                try
                {
                    switch (Menus.MenuPricipal(ref Lista))
                    {
                    case 1:
                        Menus.MenuCrear(ref Lista);
                        break;

                    case 2:
                        Menus.MenuMostrar(Lista);
                        break;

                    case 3:
                        NodoArbol arbol = Recorridos.CrearArbolPrueba_1();
                        NodoLista arb   = new NodoLista(arbol, $"Arbol de Prueba #{cont + 1}");
                        Lista.InsertarALaCabeza(arb);
                        cont++;
                        rep = true;
                        break;

                    case 4:
                        NodoArbol arbol1 = Recorridos.CrearArbolPrueba_2();
                        NodoLista arb1   = new NodoLista(arbol1, $"Arbol de Prueba #{cont + 1}");
                        Lista.InsertarALaCabeza(arb1);
                        cont++;
                        rep = true;
                        break;

                    case 5:
                        NodoArbol arbol2 = Recorridos.CrearArbolPrueba_3();
                        NodoLista arb2   = new NodoLista(arbol2, $"Arbol de Prueba #{cont + 1}");
                        Lista.InsertarALaCabeza(arb2);
                        cont++;
                        rep = true;
                        break;

                    case 6:
                        Console.Clear();
                        Console.Title = "Información del Programa";
                        Console.WriteLine("Materia: Estructura de Datos");
                        Console.WriteLine("Docente: ING. NANCY GABRIELA MARÍN CASTAÑEDA");
                        Console.WriteLine("Tercer Semestre | Grupo A | Agosto - Diciembre");
                        Console.WriteLine("Programa hecho por:");
                        Console.WriteLine("\t Victor Hugo Carreon Pulido - 192310436");
                        Console.WriteLine("\t Andrea Evelyn Mejia Rubio - 192310177");
                        Console.WriteLine("\t Edgar Eduardo Arguijo Vazquez - 192310252");
                        Console.ReadKey();
                        rep = true;
                        break;

                    case 7:
                        Environment.Exit(0);
                        break;
                    }
                }
                catch (System.FormatException)
                {
                    Console.WriteLine("Ingrese un valor numerico");
                }
            } while (rep);
        }