Создание двоичного дерева на Java для целей генетического программирования

Я работаю над проектом для класса программной инженерии, который я беру. Цель состоит в том, чтобы разработать программу, которая будет использовать генетическое программирование для генерации математического выражения, которое соответствует предоставленным обучающим данным.

Я только начал работать над проектом и пытаюсь понять, как создать двоичное дерево, которое позволит задавать высоту дерева, определяемую пользователем, и хранить каждый узел отдельно, чтобы упростить пересечение и мутацию, когда Я приступаю к реализации этих процессов.

Вот классы узлов, которые я создал. Прошу прощения за мою очевидную неопытность.

public class Node
{
    Node parent;
    Node leftchild;
    Node rightchild;

    public void setParent(Node p)
    {
        parent = p;
    }

    public void setLeftChild(Node lc)
    {
        lc.setParent(this);
        leftchild = lc;
    }

    public void setRightChild(Node rc)
    {
        rc.setParent(this);
        rightchild = rc;
    }   
}


public class OperatorNode extends Node
{
    char operator;


    public OperatorNode()
    {
        double probability = Math.random();

        if (probability <= .25)
        {
            operator = '+';
        }
        else if (probability > .25 && probability <= .50)
        {
            operator = '-';
        }
        else if (probability > .50 && probability <= .75)
        {
            operator = '*';
        }
        else
        {
            operator = '/';
        }
    }

    public void setOperator(char op)
    {
        if (op == '+' || op == '-' || op == '*' || op == '/')
        {
            operator = op;
        }
    }


/**
 * Node that holds x variables.
 */
public class XNode extends Node
{
    char x;

    public XNode()
    {
        x = 'x';
    }    
}

import java.util.Random;


public class OperandNode extends Node
{
    int operand;

    /**
     * Initializes random number generator, sets the value of the node from zero to 9.
     */
    public OperandNode()
    {
        Random rand = new Random();
        operand = rand.nextInt(10);
    }

    /**
     * Manually changes operand.
     */
    public void setOperand(int o)
    {
        operand = o;
    }
}

Это выполняет все, что мне нужно, из самих узлов, но я сталкиваюсь с проблемами, пытаясь выяснить, как превратить их в большее дерево. Я понимаю, что мне нужно использовать какой-то тип коллекции, но не могу найти в Библиотеке такую, которая кажется подходящей для того, что я пытаюсь сделать.

Мы будем очень благодарны даже за толчок в правильном направлении.

6
задан The Unfun Cat 16 November 2012 в 21:13
поделиться