Java树引用始终为null

时间:2017-05-01 01:53:16

标签: java data-structures tree

我在方法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);
    }
}

1 个答案:

答案 0 :(得分:0)

您永远不会将raiz设置为null,因此将永远不会满足insertar中的第一个if条件,这意味着您永远不会最终拥有树的根。为您的ABB类创建一个构造函数,将raiz设置为null,这样当您创建ABB类的实例时,它将被设置为null,然后您的insertar方法将能够创建根节点。