public void RealizarOperacion() { Arboles Arbol = new Arboles(); Arbol.InsertarNodo(1, 0, "A", 1); Arbol.InsertarNodo(2, 1, "B", 2); Arbol.InsertarNodo(3, 1, "C", 2); Arbol.InsertarNodo(5, 1, "E", 2); Arbol.InsertarNodo(4, 1, "D", 2); Arbol.InsertarNodo(6, 5, "F", 3); Console.WriteLine("El numero de nodos es de: " + (Arbol.ObtenerTamaño(Arbol.raiz, Arbol))); Console.WriteLine("La altura es de: " + Arbol.ObtenerAltura(Arbol.raiz, Arbol)); Console.WriteLine("El numero de niveles es de: " + Arbol.ObtenerNiveles(Arbol.raiz, Arbol)); Console.ReadLine(); Arbol.ImprimirArbol(Arbol.raiz, Arbol); Console.ReadLine(); Console.Write("Ruta al elemento mas largo (Ruta mas larga): "); Arbol.ImprimirRuta(Arbol.raiz, Arbol, "F", Arbol.raiz); Console.ReadLine(); //Console.Write("Ruta al elemento mas largo: G -> A -> C"); //Console.ReadLine(); }
public void ImprimirRuta(Nodo Nodin, Arboles Arbolin, string letra, Nodo Temporal) { ObtenerRuta(Nodin, Arbolin, letra, Temporal); //Obtiene la ruta Ruta.AddFirst(Nodin.Letra); //Debido a que mi metodo no lee la raiz por alguna razon la agrego al final foreach (string wea in Ruta) { Console.Write("{0} -> ", wea); //Despliega la lista que tiene la ruta al nodo en cuestion } Ruta.Clear(); }
public void ImprimirArbol(Nodo Nodin, Arboles Arbolin, int prueba) //Metodo recursivo para imprimir el arbol basado en el de altura y niveles { if (Nodin != null) //Si el nodo no esta vacio. { foreach (Nodo wea in Nodin.Hijos) //Por cada nodo en la lista de hijos de un nodo { Console.WriteLine("Nivel {0}: {1}", wea.Nivel, wea.Letra); //Imprime la letra y el nivel del nodo ImprimirArbol(wea, Arbolin, 1); //Vuelve a llamar el metodo } } }
int tamaño = 0; //Obtiene el tamaño del arbol (Numero de nodos) public int ObtenerTamaño(Nodo Nodin, Arboles arbolin) { if (Nodin != null) //si el nodo no esta nulo entra al metodo recursivo para conseguir el tamaño { tamaño++; //Aumenta el tamaño en uno foreach (Nodo wea in Nodin.Hijos) //Por cada nodo dentro de la lista de hijos de un nodo { ObtenerTamaño(wea, arbolin); //Llamara al metodo otra vez, sumando el tamaño en uno y esta vez sera con un nodo dentro } //de la lista de hijos. } return(tamaño); //Regresa el tamaño del arbol. }
int altura = 2; //Obtiene la altura del arbol, empieza en dos porque la altura solo la sumo si un nodo tiene hijos public int ObtenerAltura(Nodo Nodin, Arboles arbolin) //Y como no cuenta el nodo inicial debido a como funciona el metodo { //Ademas de que no suma si el nodo no tiene hijos if (Nodin != null) { foreach (Nodo wea in Nodin.Hijos) //Por cada nodo dentro de una lista reliza el proceso recursivo { if (wea.Hijos.Count > 0) //Si la lista de hijos tiene mas de 0 entonces se le suma la altura uno { altura++; } ObtenerAltura(wea, arbolin); //Se vuelve a llamar el metodo para hacerlo recursivo que termina hasta que un nodo } //esta vacio } return(altura); //Regresa la altura. }
public void ObtenerRuta(Nodo Nodin, Arboles Arbolin, string letra, Nodo Temporal) //Metodo recursivo para hacer la ruta a un nodo en especifico { if (Nodin != null) //Ingreso dos veces la raiz debido a que la raiz sera necesario para que se pueda volver a recorrer el arbol { //Debido a como funciona el metodo recursivo foreach (Nodo wea in Nodin.Hijos) { if (letra == wea.Letra) //Cuando se encuentra el nodo que tiene la letra buscada { Ruta.AddFirst(wea.Letra); //Se agrega la letra a la lista ObtenerRuta(Temporal, Arbolin, Nodin.Letra, Temporal); //Vuelve a llamar el metodo pero desde el inicio otra vez y esta vez la letra buscada } //Es la del nodo que tenia de hijo al nodo buscado else { ObtenerRuta(wea, Arbolin, letra, Temporal); //Vuelve a llamar el metodo si no es la misma letra } } } }
public void RealizarOperacion() { Arboles Arbol = new Arboles(); Arbol.InsertarNodo(11, 0, "K", 1); Arbol.InsertarNodo(2, 11, "B", 2); Arbol.InsertarNodo(1, 11, "A", 2); Arbol.InsertarNodo(3, 11, "C", 2); Arbol.InsertarNodo(4, 11, "D", 2); Arbol.InsertarNodo(9, 4, "I", 3); Arbol.InsertarNodo(5, 4, "E", 3); Arbol.InsertarNodo(6, 5, "F", 4); Arbol.InsertarNodo(7, 5, "G", 4); Arbol.InsertarNodo(10, 9, "J", 4); Arbol.InsertarNodo(8, 7, "H", 5); Console.WriteLine("El numero de nodos es de: " + (Arbol.ObtenerTamaño(Arbol.raiz, Arbol))); Console.WriteLine("La altura es de: " + Arbol.ObtenerAltura(Arbol.raiz, Arbol)); Console.WriteLine("El numero de niveles es de: " + Arbol.ObtenerNiveles(Arbol.raiz, Arbol)); Console.ReadLine(); Arbol.ImprimirArbol(Arbol.raiz, Arbol); Console.ReadLine(); Console.Write("Ruta a C: "); Arbol.ImprimirRuta(Arbol.raiz, Arbol, "C", Arbol.raiz); Console.ReadLine(); Console.Write("Ruta a H: "); Arbol.ImprimirRuta(Arbol.raiz, Arbol, "H", Arbol.raiz); Console.ReadLine(); Console.Write("Ruta a J: "); Arbol.ImprimirRuta(Arbol.raiz, Arbol, "J", Arbol.raiz); Console.ReadLine(); }
public void ImprimirArbol(Nodo Nodin, Arboles Arbolin) //Metodo recursivo para imprimir el arbol basado en el de altura y niveles { Console.WriteLine("Nivel {0}: {1}", Nodin.Nivel, Nodin.Letra); //Imprime el nivel y la letra ImprimirArbol(Nodin, Arbolin, 1); //LLama al metodo sobrecargado para hacerlo recursivo }