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

标签 java binary-search-tree

我用 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/

相关文章:

Java - 在 windows/linux 中控制控制台输出

java - 接口(interface)是否为Java中的对象提供特定含义

Java Swing Combobox removeAllItems 也调用 ItemStateChanged 吗?

c++ - 递归函数错误 : "-var-create: unable to create variable object"

java - 以二叉搜索树格式存储数据的硬拷贝

java - 我如何识别 Java 套接字中的 EOF?

java - 在媒体播放器上实现后台服务

c - 线程二叉树的顺序继承者

java - 如何从 bst 返回排序数组(仅使用局部变量)?

c++ - 二叉树 "behavior"