我学的是c++,但对java还很陌生。我正在尝试编写一个二叉搜索树(bst)类。下面是我的代码:
public class binary_tree {
public class node
{
int data;
node left , right;
node(int data , node left , node right)
{
this.data = data;
this.left = left;
this.right = right;
}
}
private node root = null;
public void addElement(int x)
{
addElementNotSeen(x , this.root);
//this function allows the user to only give x
//as a parameter
}
private void addElementNotSeen(int x , node curent)
{
if (curent == null)
{
curent = new node(x , null , null);
}
else
{
if (x > curent.data)addElementNotSeen(x , curent.right);
else addElementNotSeen(x , curent.left);
}
}
}
但是,我的根似乎没有得到任何值。我看到在java中,你不需要通过引用传递参数,所以我看不出问题所在。你能帮我吗?
2条答案
按热度按时间e0uiprwp1#
这行代码
没有任何影响
addElementNotSeen
因为它只修改本地引用。请参阅oracle文档:
引用数据类型参数(如对象)也按值传递到方法中。这意味着当方法返回时,传入的引用仍然引用与以前相同的对象。但是,如果对象的字段具有适当的访问级别,则可以在方法中更改这些字段的值。
qrjkbowd2#
当你检查
node
是null
然后创建它,实际上是为参数的引用创建一个新节点,而不是为在函数外部传递的原始引用。所以,与其检查
node
是null
在addElementNotSeen
,检查是否this.root
是null
在addElement
,并直接示例化。当递归地将数据传递到树上时也是如此。别冒险过关
null
作为参数。检查是否left
或者right
如果为null,则直接创建它们,如前面的示例所示this.root
.