java - 传递到方法时不向树分配新节点

标签 java binary-search-tree

当我们通过传递到方法中创建新节点时,新节点不会分配给树,但直接创建时会工作,而不是传递到方法中。

我已经制作了 Node 类和 MYBinarySearchTree 类。当我在 insertIt 方法中传递根节点和数据时,它会在运行时给出 nullpointerException。

class Node{
    int data;
    Node left, right;
    Node(int d){
        data = d;
        left = right  = null;
    }
}
class MyBinarySearchTree{
    Node root ;

    MyBinarySearchTree(){
        root = null;
    }

    void insert(int data){
        //root = new Node(data);
        insertIt(root,data);

    }

    static void insertIt(Node node, int data){
        node = new Node(data);

    }

}
class BinarySearchTree{
    public static void main(String[] args) {
        MyBinarySearchTree bst = new MyBinarySearchTree();
        bst.insert(45);
        System.out.println(bst.root.data);

    }
}

上面的代码不起作用。



    void insert(int data){
        root = new Node(data);
        //insertIt(root,data);

    }

    static void insertIt(Node node, int data){
        node = new Node(data);

    }

上面的代码正在运行

我不明白两者之间有什么区别,因为在java中对象是通过引用传递的,所以它应该给出相同的结果。

最佳答案

这不是真的:

because in java objects are pass by reference

Java 仅支持值传递。当将 node 传递给 insertIt() 方法时,会传递 node 值的副本(引用)。 insertIt() 方法创建另一个对象 new Node(data) 并且它有一个不同的引用。是变量node改变了它的引用(到new Node(data)),而不是对象本身。

在这里,你的函数 insertIt() 应该像这样:

Node insertIt(int data){
    return new Node(data);
}

在你的 insert() 函数中:

void insert(int data){
    this.root = insertIt(data);
}

此外,我不明白 insertIt() 函数的目的是什么,除了创建一个新节点。

关于java - 传递到方法时不向树分配新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294348/

相关文章:

java - 如何在 Java 中创建一个没有年份参数的新 Date 对象?

java - 查找akka中所有 child Actor 的状态

c - 使用 for 循环插入二叉搜索树 (C)

algorithm - 树排序 : time complexity

data-structures - 为什么用二进制搜索树实现哈希表?

c++ - 数组 BST 的插入排序如何工作?

c# - 连接到网络服务的 Android 应用程序 - 无法正常工作

java - grails 3加载图像外部文件夹

c++ - 二叉搜索树插入垃圾数据

java - 从打包在 jar 中的库访问类