ava*_*obo 2 java binary-search-tree
我用Java创建了一个二叉搜索树,但是我在删除节点部分时遇到了麻烦.当它只有1个儿子的时候我设法擦除了节点,并且我有想法在它有2个儿子时进行删除,无论如何我没有儿子时使用的方法(当它是一片叶子时)不起作用Java的.通常在C++中我会将Node指定为"null",但它在这里不起作用.
if (numberOfSons(node) == 0) {
node= null;
return true;
}
Run Code Online (Sandbox Code Playgroud)
这是处理归零部分的代码部分.当我调试它时,它正在引用正确的节点并且它为它分配空值,但是当我返回到我正在为我的树调用delete方法的Frame时,节点仍然在那里.在Java中"空"对象的正确方法是什么?我认为这里的一切都是指针,所以这会起作用,但我认为它没有.
当你正在null做某事时,你只需在你所在的范围内进行参考null.它不会影响任何外面的东西.
让我举例说明.假设你有一个方法foo:
public void foo(Node node) {
node = null;
if(node == null) {
System.out.println("node is null");
} else {
System.out.println("node is not null");
}
}
Run Code Online (Sandbox Code Playgroud)
现在你这样称呼它:
public void doSomething() {
Node node = new Node();
foo(node);
if(node == null) {
System.out.println("Original node is null");
} else {
System.out.println("Original node is not null");
}
}
Run Code Online (Sandbox Code Playgroud)
在您的控制台中,您将获得:
node is null
original node in not null
Run Code Online (Sandbox Code Playgroud)
原因是它不是指针,它是一个参考.当您使用null引用时,您只需说"将此引用同义词设为null".这并不意味着该对象被删除,它可能仍然存在于其他地方.没有办法删除java中的对象.您所能做的就是确保没有其他对象指向它们,垃圾收集器将删除对象(有时).
| 归档时间: |
|
| 查看次数: |
4183 次 |
| 最近记录: |