-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);
}
}
ここで、「this.raiz」には何を割り当てますか?インスタンスに割り当てられることはないので、nullのままにしてください。 –
どこですればいいですか?私は本をコピーしてその方法を理解しようとしましたが、私はレイズに問題があります。 –