即使将其设置为null后,节点仍然存在

时间:2020-01-25 21:14:01

标签: java binary-search-tree

我正在尝试删除BST中的最小元素。可能有2种情况:

案例1:没有合适的孩子 在这种情况下,请将当前节点立即设置为空。

node=delete(node);

第二种情况:合适的孩子在场。 在这种情况下,将右子节点的内容复制到当前节点,然后删除右子节点。

if(node.right!=null)
        {
            node.data=node.right.data;
            node.right=null;
        }

我的疑问是,为什么第二种情况有效而第一种情况无效。我的意思是,如果“ node”是一个引用变量,因此将其为null不会使它在实际树中为null,那么为什么node.right可以正常工作吗? 我的完整功能代码:

public static int del_min(Node node)
{
    if(node.left==null)
    {
        minimum=node.data;
        if(node.right!=null) //WORKING
        {
            node.data=node.right.data;
            node.right=null;
        }
        else //NOT WORKING
        {
            node=null;
        }
    }
    else
    {
        minimum=del_min(node.left);
    }
    return minimum;
}

请帮助我。

1 个答案:

答案 0 :(得分:1)

之所以不起作用,是因为node.right存储在内存中,而node是指向内存中位置的临时指针。

这意味着更新node.right时,您实际上将在永久存储器中查找存储的指针,然后对其进行更改。当您更新节点时,它将仅在堆栈框架中对其进行更新,并且在函数完成执行后,该引用将被删除。

以下是有关按引用传递和一般引用类型的更多信息: https://web.archive.org/web/20180706164632/http://www.yoda.arachsys.com/csharp/parameters.html

相关问题