View Full Version : [JAVA] Newbie e rappresentazione alberi
f0/\/2!3
06-12-2007, 08:54
Ho un'espressione logica del tipo "a AND b OR c" e devo rappresentarla come un albero del tipo:
OR
/ \
AND c
/ \
a b
Come fare?
Suddividi l'espressione strighe separate da spazio, riconosci cosa rappresentano le varie stringhe (operatore o variabile) e costruisci l'albero.
Che precedenza hai fra gli operatori ? Se non hai la precedenza allora è molto più facile in quanto la precedenza è quella di lettura.
Imho ti conviene crearti una interfaccia Elemento. Operatore e Variabile implementano elemento.
f0/\/2!3
11-12-2007, 11:10
Scusa il ritardo del reply.
Attualmente la situazione è la seguente: ho un vettore in cui ci sono gli elementi dell'espressione messi in ordine, quindi la precedenza degli operatori l'ho già stabilita, ora devo solo metterli su di un albero ma non riesco proprio...
La struttura è come te l'ho disegnata sopra ovvero se ho una cosa del tipo:
"a AND b OR c OR d"
...l'albero dovrà essere...
OR
/ \
OR d
/ \
AND c
/ \
a b
Come dicevo parti dalla suddivisione dell'espressione in sotto stringhe da inserire in una lista. A quel punto basta visitare in ordine le stringhe per costruire l'albero.
f0/\/2!3
12-12-2007, 20:19
A livello teorico ci sono... il problema è proprio il codice... quanto sono niubbo
A livello teorico ci sono... il problema è proprio il codice... quanto sono niubbo
Intanto parti a dividere le stringhe...scrivi il codice e vediamo dove ti fermi.
f0/\/2!3
13-12-2007, 16:54
package unicam.aaftx.operators;
import java.util.Vector;
/*Classe Node*/
public class Node
{
Node left;
Node right;
Object data;
public Node CreateNode(Node dx, Node sx, Object newData)
{
right = dx;
left = sx;
data = newData;
return this;
}
public void CreateRoot(int i, Vector<Object> complexAssist)
{
Node root = CreateNode (null, null, complexAssist.get(i));
CreateTree(i, complexAssist, root);
}
public void CreateTree(int i, Vector<Object> complexAssist, Node root)
{
ComplexSelectionCondition csc;
this.right = new Node();
this.right.CreateNode(null, null, complexAssist.get(i + 1));
if (i - 2 < 0)
{
this.left = new Node();
this.left.CreateNode(null, null, complexAssist.get(i - 1));
csc = new ComplexSelectionCondition(root);
}
else
{
i = i - 2;
this.left = new Node();
this.left.CreateNode(null, null, complexAssist.get(i));
this.left.CreateTree(i, complexAssist, root);
}
}
}
EDIT:
OK così funziona!!!
Ora il problema è considerare le parentesi... Un'espressione del tipo: a AND (b OR c) AND (d AND e) ci manda assolutamente in crisi... :(
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.