ID3 Java Enum Tree

Estoy tratando de hacer un árbol de aprendizaje no binario que sea una versión simplificada del algoritmo ID3. Para hacer esto, intenté usar enumeraciones, porque hay varias referencias que enseñan jerarquías de enumeración, pero tengo problemas con la transferencia de las enumeraciones a las funciones que necesito para hacer el árbol. Configuré todo lo que necesito para el árbol lo mejor que pude, pero estoy teniendo problemas con la construcción inicial del árbol.

Primero, hice seis enums, cada uno con su propio archivo para que no tuviera que escribir "main.enumname" en todas partes. Estos primeros cinco enumerados representan diagnósticos de automóviles.

<code>public enum fuelstats {notempty, empty}
public enum lightstatus {Dim, Normal}
public enum scents {normal, gas}
public enum soundstatus {Normal, Howl, Screech, Click}
public enum turn {no, yes}
</code>

A continuación, hice dos enums más. Uno para los diferentes resultados de diagnóstico y otro para los diferentes "temas" de diagnóstico de automóviles.

<code>public enum problems {battery, starter, solenoid, outofgas, flooding}
public enum features {lightstatus, soundstatus, fuelstats, scents, turn, problems}
</code>

Luego hice cinco ejemplos de datos de diferentes diagnósticos de automóviles para clasificarlos en el árbol.

<code>Example example1 = new Example(lightstatus.Dim, soundstatus.Howl, turn.yes, fuelstats.notempty, scents.normal, problems.battery);
Example example2 = new Example(lightstatus.Normal, soundstatus.Screech, turn.no, fuelstats.notempty, scents.normal, problems.starter);
Example example3 = new Example(lightstatus.Normal, soundstatus.Click, turn.no, fuelstats.notempty, scents.normal, problems.solenoid);
Example example4 = new Example(lightstatus.Normal, soundstatus.Normal, turn.yes, fuelstats.empty, scents.normal, problems.outofgas);
Example example5 = new Example(lightstatus.Normal, soundstatus.Normal, turn.yes, fuelstats.notempty, scents.gas, problems.flooding);

//make an array list of Examples.
ArrayList<Example> Examples = new ArrayList<Example>();
Examples.add(example1);

Examples.add(example2);
Examples.add(example3);
Examples.add(example4);
Examples.add(example5);
</code>

Coloqué los diversos diagnósticos del automóvil, llamados Características, en una Lista de Arrays para barajar, porque se usarán aleatoriamente para construir el árbol.

<code>//This ArrayList holds the Enums for shuffling purposes.
ArrayList<features> Features = new ArrayList<features>();

Features.add(features.soundstatus);
Features.add(features.lightstatus);
Features.add(features.turn);
Features.add(features.scents);
Features.add(features.fuelstats);

// Shuffle the elements in the list
Collections.shuffle(Features);

//The Features Array List is now a shuffled tree.
//We will do a single loop that will serve as our stack.

//First we take the top of the list and assign it to the root.
Tree id3 = new Tree(Features.get(0),Examples);
</code>

Pero, ¿cómo escribo un árbol que: Toma una enumeración de características que hace que el sujeto de la raíz coincida con la enumeración, y todos los diferentes estados de la enumeración de los hijos? Por ejemplo, si el estado de sonido es la raíz, debería tener cuatro hijos que sean Normal, Howl, Screech y Click. De esa manera puedo hacer coincidir los sonidos del Ejemplo con los sonidos de los niños. Este es mi nodo hasta ahora.

<code>public class Node 
{

    ArrayList<Node> children;


    /* Constructor*/
    public Node(ArrayList<Node> ExampleList) 
    { 
        this.ExampleList = ExampleList;
        this.parent = parent;
        this.children = children; 
    }

    public ArrayList<Node> getChildren() 
    { 
        return children; 
    }

    public void addChild(Node n) 
    { 
        children.add(n);
    }

    private ArrayList<Node> children;

    Enum phrase;

    private boolean isUsed;

    Node parent;

    public void setUsed(boolean isUsed) 
    {
        this.isUsed = isUsed;
    }

    public boolean isUsed() 
    {
        return isUsed;
    }
    //This method states if the node is a leaf 
    public boolean isLeaf()
    {
        if (this.getChildren() == null)
        return true;

        else
        return false;
    }

}
</code>

Respuestas a la pregunta(2)

Su respuesta a la pregunta