J'ai un problème avec le paramètre raiz dans les méthodes insertar et preorden, inorden et postorden, la référence que je passe dans la méthode principale ne change jamais et c'est comme si les trois n'avaient aucun élément pense. Donc quand j'essaie d'exécuter la méthode preorden, c'est comme si l'arbre était vide et qu'il n'imprimait rien. PD: J'insère des nombres dans un arbre de recherche binaire et je dois les commander en précommande, en ordre et en post-commande.Référence de l'arbre Java toujours nulle
public class ABBNodo {
int data;
ABBNodo izq;
ABBNodo der;
public int getData(){
return data;
}
public void setData(int data){
this.data=data;
}
public ABBNodo getIzq(){
return izq;
}
public void setIzq(ABBNodo izq){
this.izq=izq;
}
public ABBNodo getDer(){
return der;
}
public void setDer(ABBNodo der){
this.der=der;
}
}
class ABB{
ABBNodo raiz;
ABBNodo buscar(ABBNodo raiz, int data){
if(raiz== null) return null;
if(data<raiz.getData()) return buscar(raiz.getIzq(),data);
else if(data>raiz.getData()) return buscar(raiz.getDer(),data);
return raiz;
}
ABBNodo insertar(ABBNodo raiz, int data){
if(raiz==null){
raiz=new ABBNodo();
if(raiz==null){
System.out.println("Error de memoria"); return raiz;
}else{
raiz.setData(data);
raiz.setIzq(null); raiz.setDer(null);
}
}else{
if(data<raiz.getData()) raiz.setIzq(insertar(raiz.getIzq(),data));
else if(data>raiz.getData()) raiz.setDer(insertar(raiz.getDer(),data));
}
return raiz;
}
void preOrden(ABBNodo raiz){
if(raiz!=null){
System.out.println(raiz.getData());
preOrden(raiz.getIzq());
preOrden(raiz.getDer());
}
}
void inOrden(ABBNodo raiz){
if(raiz!=null){
inOrden(raiz.getIzq());
System.out.println(raiz.getData());
inOrden(raiz.getDer());
}
}
void postOrden(ABBNodo raiz){
if(raiz!=null){
postOrden(raiz.getIzq());
postOrden(raiz.getDer());
System.out.println(raiz.getData());
}
}
}
class main{
public static void main(String[] args){
ABB a1=new ABB();
int data=0;
ABBNodo raiz = null; //This never changes
do{
System.out.println("Ingrese el numero que quiere agregar al arbol");
data=Lectura.readInt();
a1.insertar(raiz, data);
}while(data!=-1);
a1.inOrden(raiz);
}
}
Où attribuez-vous quelque chose à 'this.raiz' ?? Il semble ne jamais être affecté d'une instance et devrait donc rester nul. –
Où devrais-je faire cela? J'ai copié et essayé de comprendre les méthodes d'un livre, mais j'ai des problèmes avec Raiz. –