public void PorNiveles() { Cola <ArbolGeneral <T> > cola = new Cola <ArbolGeneral <T> >(); cola.encolar(this); while (!cola.esVacia()) { int n = cola.cantidad(); while (n > 0) { ArbolGeneral <T> p = cola.tope(); cola.desencolar(); Console.Write(p.getDatoRaiz() + " "); foreach (var v in p.getHijos()) { cola.encolar(v); } n--; } Console.WriteLine(); Console.WriteLine(); } }
public void recorridoEntreNiveles(int a, int b) { if (esVacio()) { return; } Cola <ArbolGeneral <T> > cola = new Cola <ArbolGeneral <T> >(); cola.encolar(this); int nivel = 0; while (!cola.esVacia()) { nivel++; int n = cola.cantidad(); while (n > 0) { ArbolGeneral <T> p = cola.tope(); cola.desencolar(); if (nivel >= a && nivel <= b) { Console.Write(p.getDatoRaiz() + " "); } if (!p.esVacio()) { foreach (var v in p.getHijos()) { cola.encolar(v); } } n--; } if (nivel >= a && nivel <= b) { Console.WriteLine(); } } }
public void profundidad(int n, int profundidad) { //Este metodo permite realizar la consulta de los datos de los nodos que se encuentran entre dos niveles //si los parametros n=profundidad obtenemos los datos que se encuentran en un determinado nivel. Si los //decrementamos el nivel en uno obtenemos los datos en una determinada profundidad var cola = new Cola <NodoGeneral <T> >(); cola.encolar(this.getRaiz()); cola.encolar(null); //Encola null para marcar la finalizacion un nivel. int nivel = 1; //Cuando finaliza un nivel y comienza uno nuevo la variable nivel incrementa en 1. string datos = ""; while (!cola.esVacia()) { NodoGeneral <T> aux = cola.desencolar(); if (aux == null) { cola.encolar(null); nivel++; if (cola.tope() == aux) //Esta estructura condicional permite evitar un bucle infinito, ya que cuando desencolo un null encolo otro para finalizar un nivel { //Cuando consultamos con el metodo tope no estamos desencolando sino preguntando si el siguiente dato a desencolar sera nulo o no. Si cola.desencolar(); //este dato siguiente es nulo lo desencolo y no encolo nada. De esta forma evito que se encolen nulls infinitos. } } else { if (nivel >= n && nivel <= profundidad) //Si el nivel coincide con la profundidad, es decir nivel=n=profundidad agrega a mi variable "datos" el dato del nodo que { //se encuentra en dicha profundidad. Console.Write("[" + aux.getDato() + "]"); //Esta impresion elabora una candena con los datos de los nodos que se encuentran en la misma profundidad datos = datos + aux.getDato(); } if (!this.esHoja()) { foreach (var hijo in aux.getHijos()) { cola.encolar(hijo); } } } } }
public void PorNivelesMarcadoFin() { Cola <ArbolGeneral <T> > cola = new Cola <ArbolGeneral <T> >(); //Intancia una cola vacia cola.encolar(this); //Obtiene el Nodo Raiz y lo encola cola.encolar(null); //Encola null (para determinar cuando empieza el nuevo nivel) int nivel = 1; Console.WriteLine("======================================================================================================================="); Console.Write("[Nivel-" + nivel + "]: "); while (cola.esVacia() != true) { ArbolGeneral <T> NodoDesencolado = cola.desencolar(); //Quita de la cola el dato(cola[0]) y lo almacena en la variable if (NodoDesencolado == null) { cola.encolar(null); //Si el dato es NULL, encola NULL para seƱalar el comienzo de un nuevo nivel if (cola.tope() == NodoDesencolado) { cola.desencolar(); //Si el dato en la cola, anterior a el dato NodoDesencolado, es tambien NULL se desencola //pero no se almacena en ninguna variable temporal. } else { nivel++; //Si el dato no es NULL, es nodo, nivel incrementa y se comienza a imprimir el nuevo nivel Console.Write("\n========================================================================================================================"); Console.Write("[Nivel-" + nivel + "]: "); } } else //Si el dato desencolado es un NODO se encola e imprimen los hijos de este { foreach (var Nodo in NodoDesencolado.getHijos()) { cola.encolar(Nodo); } Console.Write("[" + NodoDesencolado.getDatoRaiz() + "]"); } } Console.Write("\n========================================================================================================================"); }