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); } } } } }