public static ArbolDecision <object> ArmarArbol(Clasificador clasificador) { if (clasificador != null) { ArbolDecision <object> arbolBinario = new ArbolDecision <object>(); arbolBinario.MapArbol(clasificador); return(arbolBinario); } else { return(null); } }
public ArbolDecision <T> MapArbol(Clasificador clasificador) { bool datosEnd = false; while (!datosEnd) { if (Dato == null) { Dato = clasificador.obtenerPregunta(); } //invierto los datos del clasificador para que en el árbol las respuestas positivas vayan a la derecha. Clasificador hijoDer = new Clasificador(clasificador.obtenerDatosIzquierdo()); //Si es hoja, almaceno las etiquetas if (hijoDer.crearHoja() && HijoDerecho == null) { HijoDerecho = new ArbolDecision <T>(); Dictionary <string, int> itemHoja = hijoDer.obtenerDatoHoja(); HijoDerecho.Dato = itemHoja; datosEnd = true; } //Si no es una hoja almaceno pregunta y vuelvo a llamar al método y pregunto de vuelta. else { if (HijoDerecho == null) { HijoDerecho = new ArbolDecision <T>(); HijoDerecho.Dato = hijoDer.obtenerPregunta(); HijoDerecho.MapArbol(hijoDer); } else { datosEnd = true; } } Clasificador hijoIzq = new Clasificador(clasificador.obtenerDatosDerecho()); if (hijoIzq.crearHoja() && HijoIzquierdo == null) { HijoIzquierdo = new ArbolDecision <T>(); Dictionary <string, int> itemHoja = hijoIzq.obtenerDatoHoja(); HijoIzquierdo.Dato = itemHoja; datosEnd = true; } else { //Si no es una hoja vuelvo a llamar al método y pregunto de vuelta. if (HijoIzquierdo == null) { HijoIzquierdo = new ArbolDecision <T>(); HijoIzquierdo.Dato = hijoIzq.obtenerPregunta(); HijoIzquierdo.MapArbol(hijoIzq); } else { datosEnd = true; } } } return(this); }