2017-05-01 5 views
-2

メソッドinsertarとpreorden、inorden、およびpostordenのraizパラメータに問題があります。メインメソッドで渡す参照は決して変更されず、3つの要素にはIがありません。思う。だから、私はpreordenメソッドを実行しようとすると、ツリーが空で、何も印刷されないようなものです。Javaツリー参照は常にnull

PD:私はバイナリ検索ツリーに数字を挿入しています。それらをあらかじめ注文し、inorderとpostorderで注文する必要があります。

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

ここで、「this.raiz」には何を割り当てますか?インスタンスに割り当てられることはないので、nullのままにしてください。 –

+0

どこですればいいですか?私は本を​​コピーしてその方法を理解しようとしましたが、私はレイズに問題があります。 –

答えて

0

あなたはinsertarにおける条件は、あなたのツリーのルートを持ってしまうことは決してないだろうことを意味する満たされることはありませんので、もし最初にnullにraizを設定することはありません。 raizをnullに設定するABBクラスのコンストラクタを作成します。これにより、ABBクラスのインスタンスを作成するときにnullに設定され、insertarメソッドがルートノードを作成できるようになります。

関連する問題