gpt4 book ai didi

java - 如何从Java中的二叉搜索树中获取 "delete"节点?

转载 作者:行者123 更新时间:2023-12-02 01:28:43 25 4
gpt4 key购买 nike

我用 Java 创建了一个二叉搜索树,但在删除节点部分时遇到了麻烦。当它只有 1 个儿子时,我设法删除该节点,并且当它有 2 个儿子时,我有想法进行删除,无论如何,当它没有儿子时(当它是叶子时)我使用的方法不起作用 java 。通常在 C++ 中我会将节点分配为“null”,但它在这里不起作用。

if (numberOfSons(node) == 0) {
node= null;
return true;
}

这是处理 null 部分的代码部分。当我调试它时,它引用正确的节点并为其分配空值,但是当我返回到为树调用删除方法的框架时,该节点仍然存在。在 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");
}
}

现在你这样调用它:

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");
}
}

在您的控制台中您将得到:

node is null
original node in not null

原因是它不是指针,而是引用。当您null引用时,您只需说“将此引用设为null”。这并不意味着该对象被删除了,它可能还存在于其他地方。 java中没有办法删除对象。您所能做的就是确保没有其他对象指向它们,垃圾收集器将删除这些对象(有时)。

关于java - 如何从Java中的二叉搜索树中获取 "delete"节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22276255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com