【问题标题】:Java tree reference always nullJava 树引用始终为空
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多