/// <summary> /// Devuelvo la cantidad de niveles que posee el árbol para referenciar en el módulo 2-3. /// </summary> /// <param name="niv"></param> /// <returns></returns> public int ContarNiveles(ref int niv) { Cola <ArbolDecision <T> > nodo = new Cola <ArbolDecision <T> >(); nodo.encolar(this); nodo.encolar(null); while (!nodo.esVacia()) { if (nodo.tope() != null) { if (!nodo.tope().EsHoja()) { nodo.encolar(nodo.tope().HijoIzquierdo); nodo.encolar(nodo.tope().HijoDerecho); nodo.encolar(null); } nodo.desencolar(); } else { nodo.desencolar(); //Mientras haya elementos incremento la variable para obtener la profundidad if (!nodo.esVacia()) { niv++; } } } return(niv); }
/// <summary> /// Imprimo tanto hojas como nodos dependiendo el nodo que se pase por parametro. /// </summary> /// <param name="n"></param> public void PrintNiveles(int n) { Cola <ArbolDecision <T> > nodo = new Cola <ArbolDecision <T> >(); nodo.encolar(this); nodo.encolar(null); int NivelActual = 0; while (!nodo.esVacia() && NivelActual <= n) { if (nodo.tope() != null) { if (NivelActual >= n) { if (nodo.tope().EsHoja()) { Console.WriteLine("Predicciones de profundida {0} encontradas:", NivelActual); Dictionary <string, int> etiquetas = (Dictionary <string, int>)nodo.tope().Dato; foreach (var hoja in etiquetas) { //listadoHojas.Add(hoja.Key); Console.WriteLine(hoja.Key + ", "); } } else { Console.WriteLine("Pregunta de profundida {0} encontradas:", NivelActual); Console.WriteLine(nodo.tope().Dato); } } if (!nodo.tope().EsHoja()) { nodo.encolar(nodo.tope().HijoIzquierdo); nodo.encolar(nodo.tope().HijoDerecho); nodo.encolar(null); } nodo.desencolar(); } else { nodo.desencolar(); NivelActual++; } } }