Entra

View Full Version : [java]che c e di sbagliato in sta ricerca in un albero binario???


dnarod
09-12-2003, 17:57
public boolean cercaNodo(Node newNode,Integer b)
{
if(newNode.data.compareTo(b)==0)
{
return true;
}
System.out.println("primo if saltato");
if(newNode.data.compareTo(b)<0)
{
if(newNode.left != null) cercaNodo(newNode.left,b);
}
System.out.println("secondo if saltato");
if(newNode.data.compareTo(b)>0)
{
if(newNode.right != null) cercaNodo(newNode.right,b);
}
System.out.println("terzo if saltato");
return false;
}
------------------------------------------------------------------
che viene chiamato cosi
-----------------------------------------
public boolean cerca(int x)
{
Integer ogg = new Integer(x);
return root.cercaNodo(root,ogg);
}
----------------------------------------

e richiamato cosi
System.out.println(blabla.cerca(10));






???????????????????? se cerco il primo elemento ed è uguale al primo elemento me lo trova, in tutti gli altri casi no.......perche???

dnarod
09-12-2003, 18:06
se inserisco numeri da 3 a 20 compreso e cerco lo zero mi da sta roba:
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
primo if saltato
secondo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
terzo if saltato
false
...................................se cerco il 3 mi da true
se cerco 4 stampa questo
primo if saltato
secondo if saltato
terzo if saltato

???

dnarod
09-12-2003, 23:37
help!!

dnarod
10-12-2003, 10:53
up

cn73
11-12-2003, 09:53
Innanzitutto se davvero vuoi dare un senso a quelle System.out di debug devi:


public boolean cercaNodo(Node newNode,Integer b)
{
if(newNode.data.compareTo(b)==0)
{
return true;
}
else {
System.out.println("primo if saltato");

if(newNode.data.compareTo(b)<0)
{
if(newNode.left != null)
cercaNodo(newNode.left,b);
}
else {
System.out.println("secondo if saltato");

if(newNode.data.compareTo(b)>0)
{
if(newNode.right != null)
cercaNodo(newNode.right,b);
}
else {
System.out.println("terzo if saltato");
return false;
}
}
}

}

Questo perchè se non usi un else te le stampa sempre...

inoltre inutile controllare ad es che newNode.data.compareTo(b)>0 se era già = 0

Poi per verificare la correttezza dell'algoritmo devi postare anche le altre classi utilizzate, se non se ne verifica la corretteza non si può dire nulla...

dnarod
11-12-2003, 14:12
azzo grazie.......ora funziona thanks!!!!

cn73
11-12-2003, 15:51
Prego ;) Hai però capito il perchè?

dnarod
11-12-2003, 17:02
sisi avevo fatto una cazzata......mi hai aiutato a capire!!! tnx