【发布时间】:2017-05-01 01:53:15
【问题描述】:
insertar 和 preorden、inorden 和 postorden 方法中的 raiz 参数有问题,我在 main 方法中传递的引用永远不会改变,就像我认为这三个没有任何元素一样。因此,当我尝试运行 preorden 方法时,就像树是空的,它不打印任何东西。
PD:我正在向二叉搜索树插入数字,我必须按前序、中序和后序对它们进行排序。
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分配了任何东西??它看起来永远不会被分配一个实例,因此应该保持为空。 -
我应该在哪里做呢?我复制并试图理解书中的方法,但我遇到了 raiz 的问题。
标签: java data-structures tree