我在方法insertar和preorden,inorden和postorden中的raiz参数有问题,我在main方法中传递的引用永远不会改变,它就像三个没有任何元素我认为。因此,当我尝试运行该方法时,它就像树是空的并且它不会打印任何东西。
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);
}
}
答案 0 :(得分:0)
您永远不会将raiz设置为null,因此将永远不会满足insertar中的第一个if条件,这意味着您永远不会最终拥有树的根。为您的ABB类创建一个构造函数,将raiz设置为null,这样当您创建ABB类的实例时,它将被设置为null,然后您的insertar方法将能够创建根节点。