View Full Version : Richiesta di aiuto immediato: HELP!!!
hunter127
02-07-2003, 00:00
ho un esame il 3 luglio, e devo fare questo esercizio in Java:
Si definisca una classe il cui attributo principale sia un albero binario di ricerca contenente
esattamente i numeri interi nell’intervallo [m; n] (m e n sono forniti dall’utente),
tale che la radice abbia il valore medio tra m ed n, e le cui operazioni siano la visita
simmetrica e la restituzione della posizione (eventuale) di un valore nell’albero.
Ho fatto tutto, soltanto che nella costruzione dell'albero con numeri negativi la visita simmetrica non funziona, xchè restituisce valori sbagliati.
Vi prego in ginocchio di aiutarmi. Allego il codice che ho scritto.
hunter127
02-07-2003, 00:02
/*questo è il costruttore che crea un albero*/
public class BinTree {
private class Node {
private int val;
private BinTree lft, rgt;
public Node(int v, BinTree l, BinTree r) {
val = v;
lft = l;
rgt = r;
}
public int value() {
return val;
}
public BinTree left() {
return lft;
}
public BinTree right() {
return rgt;
}
}
private Node rootNode;
public BinTree() {
rootNode = null;
}
public BinTree(int n) {
BinTree emptyTree = new BinTree();
rootNode = new Node( n, emptyTree, emptyTree );
}
public BinTree(int n, BinTree l, BinTree r) {
rootNode = new Node(n, l,r);
}
public BinTree(int m, int n){//Costruttore
BinTree emptyTree = new BinTree();
int root = (m + n)/2;
if ((m <= root - 1) && (n >= root + 1)){
rootNode = new Node(root,new BinTree(m,(root - 1)),new BinTree((root + 1),n));
}
if ((m > root - 1) && (root + 1 <= n)){
rootNode = new Node(root,new BinTree(),new BinTree((root + 1),n));
}
if ((m <= root - 1) && (root + 1 > n)){
rootNode = new Node(root,new BinTree(m,root - 1),new BinTree());
}
if (m == n){
rootNode = new Node(root,new BinTree(),new BinTree());
}
}
public boolean empty() {
return ( rootNode == null );
}
public int root() {
return rootNode.value();
}
public BinTree left() {
return rootNode.left();
}
public BinTree right() {
return rootNode.right();
}
}
hunter127
02-07-2003, 00:05
/* classe che richiama l'albero e fa la visita simmetrica*/
import console.*;
public class menu{
public static void Sim(BinTree tree,int[] array,int a, int b) { //Visita simmetrica
if (!tree.empty()){ //Se l'albero non è vuoto
int nodo = ( (a+b) / 2); //cerco la posizione del nodo corrente,
if (tree.root()<0) {
array[nodo]=tree.root();}else{
array[nodo-1]=tree.root();}
Sim(tree.left(), array, a, nodo-1); //continuo con il sottoalbero sinistro,
Sim(tree.right(), array, nodo+1,b);} //continuo con il sottoalbero destro.
}
public static int conta(BinTree tree){ //Numero di elementi di un albero.
if ( tree.empty() ){ //Se l'albero è vuoto
return 0; //ritorno 0
}else{ //altrimenti
return 1 + conta(tree.left()) + conta(tree.right()); //aggiungo un uno e controllo il sottalbero
} //destro e sinistro
}
public static void main(String[] args){ //MAIN
Console out=new Console();
out.put("Inserisci il valore minimo dell'albero: ");
int m=out.getlnInt();
out.put("Inserisci il valore massimo dell'albero: ");
int n=out.getlnInt();
BinTree tree = new BinTree(m,n);
int dim = conta(tree);
int[] array=new int[dim];
Sim(tree, array, 1, dim);
out.putln("La visita simmetrica dell'albero è: ");
for(int i=0; i<dim; i++){
out.put(" "+array[i]);
}}
}//CLOSE CLASS
hunter127
02-07-2003, 00:06
Dove ho sbagliato? vi prego di rispondermi ....
Grazie in anticipo.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.