将对象的引用设置为null似乎不起作用
本文关键字:null 不起作用 设置 对象 引用 | 更新日期: 2023-09-27 18:16:19
我正在尝试使用c#从二叉树中删除节点。此示例仅在节点没有子节点时有效。我理解删除是如何与孩子一起工作的,但我在一个问题上挂了电话,在我看来,这是由于缺乏对c#的理解:
public class Tree
{
internal class Node
{
public int Val { get; set; }
public Node Left { get; set; }
public Node Right { get; set; }
public Node(int val)
{
Val = val;
}
}
private Node root;
public void Delete(int val)
{
Node current = this.root;
Node parent = null;
while (true) {
if (val < current.Val) {
parent = current;
current = current.Left;
}
else if (val > current.Val) {
parent = current;
current = current.Right;
}
else if (val == current.Val) {
current = null;
return;
}
}
}
}
我的问题是在我设置current = null的行。我打算使用它的方式是,使用current = null来删除当前节点。但这行不通。如果我从父节点引用当前节点:
parent.Right = null;
节点被正确删除,但这显然很麻烦,因为我需要检查当前节点是该节点的右子节点还是左子节点。我错过了什么?提前感谢!
你不能这么做。
current
变量是独立于parent.Left
或parent.Right
变量的变量。
当你这样做的时候:
current = parent.Left;
你复制了变量的值,你没有将一个变量链接到另一个。你可以把它比作便利贴。在一张便条上你有一个地址,然后你执行上述声明,并复制地址到另一张便条上。之后更改副本不会以任何方式或形状改变原始笔记。
所以,是的,您需要跟踪您从哪个子引用变量获得current
。