PDA

View Full Version : [Java] Cercare e Restituire un Nodo di un Albero


nico88desmo
25-11-2008, 19:17
Un saluto a tutti!
Come da titolo, avrei il seguente problema: restituire il nodo di un Albero una volta trovata l'informazione (suppongo che l'albero non contenga informazioni duplicate).
La mia idea era di scorrere tutto l'albero seguendo una inorder-visit, e una volta trovata l'informazione, restituisco l'intero nodo;
il problema è la realizzazzione; pongo subito il codice da me scritto:

private BTPosition<E> findNode (E v, BTPosition<E> app) {
if (app!=null) {
if (app.element().equals(v))
return app;

appNode = findNode(v, app.getLeft());
appNode = findNode(v, app.getRight());

}
return appNode;
} // end findNode


il metodo funzionerebbe così, soltanto che non vorrei utilizzare la variabile appNode (variabile d'appoggio definita all'interno della classe), anche perchè nel caso provassi a cercare un elemento che non è presente nell'albero, la variabile appNode punterebbe ancora alla ricerca precedente;
La soluzione che avevo in mente consisteva nel dichiarare static la variabile all'interno del metodo, però il compilatore non me lo lascia fare;

Qualcuno mi potrebbe dare qualche dritta su come fare?

Grazie!

sottovento
26-11-2008, 08:24
Il problema non si pone: devi semplicemente ritornare null quando app == null.
Infatti, hai fatto (correttamente) il controllo che app sia diverso da null prima di fare il tuo "dirty job" ;) , ma se e' null non ritorni niente.

Quando fai le due findNode() ricorsive, dovrai infine riportare solo quella diversa da null (se ne esiste una, altrimenti ritorni null). Se entrambe sono diverse da null (i.e. lo stesso valore in nodi diversi) puoi decidere quale dei due ritornare, anche se ho visto che questo caso non ti interessa.

In sostanza: non ti serve nessuna statica. Una semplice variabile locale temporanea e' sufficiente

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.