当我们通过传递到方法中创建新节点时,新节点不会分配给树,但直接创建时会工作,而不是传递到方法中。
我已经制作了 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/