|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2000
Messaggi: 53
|
Richiesta di aiuto immediato: HELP!!!
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.
__________________
Pentium 4 3Ghz HT bus 800, Asus P4P800, 1GB DDR400 Kingston, HD 2 x Seagate 80GB SATA Raid0 , Asus GeforceFX 5900 128MB,Pioneer 116 DVD, DVD+RW BTC, Sony X73 17" LCD. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2000
Messaggi: 53
|
/*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(); } }
__________________
Pentium 4 3Ghz HT bus 800, Asus P4P800, 1GB DDR400 Kingston, HD 2 x Seagate 80GB SATA Raid0 , Asus GeforceFX 5900 128MB,Pioneer 116 DVD, DVD+RW BTC, Sony X73 17" LCD. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2000
Messaggi: 53
|
/* 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
__________________
Pentium 4 3Ghz HT bus 800, Asus P4P800, 1GB DDR400 Kingston, HD 2 x Seagate 80GB SATA Raid0 , Asus GeforceFX 5900 128MB,Pioneer 116 DVD, DVD+RW BTC, Sony X73 17" LCD. |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2000
Messaggi: 53
|
Dove ho sbagliato? vi prego di rispondermi ....
Grazie in anticipo.
__________________
Pentium 4 3Ghz HT bus 800, Asus P4P800, 1GB DDR400 Kingston, HD 2 x Seagate 80GB SATA Raid0 , Asus GeforceFX 5900 128MB,Pioneer 116 DVD, DVD+RW BTC, Sony X73 17" LCD. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:05.



















