2017-05-01 1 views
-2

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); 
    } 
} 
+0

Où attribuez-vous quelque chose à 'this.raiz' ?? Il semble ne jamais être affecté d'une instance et devrait donc rester nul. –

+0

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. –

Répondre

0

Vous ne définissez Raiz null si la première si la condition dans insertar ne sera jamais rencontré ce qui signifie que vous ne serez jamais finir par avoir une racine de votre arbre. Créez un constructeur pour votre classe ABB qui définit raiz sur null de sorte que lorsque vous créez une instance de la classe ABB, il sera défini sur null, puis votre méthode insertar sera capable de créer un nœud racine.