I'm trying to mount a Generic Tree in java to mount a Boolean expression inside a genetic expression algorithm, this tree would store several types of variables, I'm not sure which is the most optimized way to do this, I was thinking of saving logical operators as &&
, ||
in strings and also the mathematical operators +
, -
, /
, *
. Operators would be stored in the root / branch nodes and operands that could be functions or variables would be stored in terminal nodes (sheets), does anyone have any ideas? I spent the day in this problem and I'm a bit frustrated.
public class ArvoreJava {
public static No raiz; // o único campo de dado em Arvore
public ArvoreJava() { // construtor
raiz = null; //nenhum nó na arvore
}
public static No insere(String palavra, No no) { //metodo insere
if(no == null){
no = new No(palavra); //se nao existir nó cria um novo
}
else if((compare(palavra, no.palavra)) < 0){ // faz comparação, se palavra
no.filhoEsquerda = ArvoreJava.insere( palavra , no.filhoEsquerda);// menor que nó, insere na esquerda
}
else if((compare(palavra, no.palavra)) > 0){//se palavra maior que nó, insere na direita
no.filhoDireita = ArvoreJava.insere(no.palavra, no.filhoDireita);
}
else{// senão, palavra já contem
System.out.println("ERRO: valor já existe na árvore.");
return null;
}
return no;
}
public static void caminhando(ArvoreJava arv){//caminha na arvore
System.out.println("Pré-ordem: ");
arv.preordem(arv.raiz);
}
public static int compare(String palavra, String no){ // compara strings e retorna um inteiro
return palavra.toString().compareTo(no.toString());//-1 menor, 1 maior, 0 iguais
}
public void preordem(No no) {//caminha em preordem
if (no == null){
return;
}
System.out.println(no.palavra);
preordem(no.filhoEsquerda);
preordem(no.filhoDireita);
}
}
And the node class.
package arvore;
public class No {
String palavra; //dado
No filhoEsquerda; //cria filho a esquerda
No filhoDireita; // cria filho a direita
public No(String palavra){
this.palavra = palavra;
}
public void mostraNo(){
{
System.out.print(palavra);
System.out.print(", ");
}
}
}
That is, what I would know to implement is very simple, but in personal design I need to implement a structure with these characteristics or close to them to get close to some satisfactory result. Anyone who has the patience to try to help, I thank you right away.