2017-05-01 3 views
-2

Ich habe ein Problem mit dem Raiz-Parameter in den Methoden Insert und Preorden, Inorden und Postorden, die Referenz, die ich in der Hauptmethode nie ändern und es ist wie die drei kein Element I denken. Wenn ich also versuche, die Methode preOrden auszuführen, ist es so, als wäre der Baum leer und es wird nichts gedruckt.Java Baum Referenz immer Null

PD: Ich füge Zahlen in einen binären Suchbaum ein und ich muss sie in Vorbestellung, Reihenfolge und nach Bestellung bestellen.

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

Wo hast du 'this.raiz' etwas zugewiesen? Es scheint nie eine Instanz zugewiesen zu sein und sollte daher null bleiben. –

+0

Wo soll ich das machen? Ich habe kopiert und versucht, die Methoden aus einem Buch zu verstehen, aber ich habe Probleme mit Raiz. –

Antwort

0

Sie nie raiz so eingestellt, dass die ersten auf Null, wenn die Bedingung in insertar nie erfüllt werden, was bedeutet, dass Sie nie eine Wurzel für Ihren Baum mit bis beenden. Erstellen Sie einen Konstruktor für Ihre ABB-Klasse, der raiz auf null setzt, sodass beim Erstellen einer Instanz der ABB-Klasse null festgelegt wird und Ihre Insertar-Methode einen Stammknoten erstellen kann.