我有一个非常奇怪的问题。基本上我创建了一个名为TreeNode的类,它表示树中的节点。然后,我通过将所有节点添加到List来创建树。
class TreeNode
{
private TreeNode parent, lChild, rChild;
private int key, val;
public int Key
{
get { return key; }
set { key = value; }
}
public int Val
{
get { return val; }
set { val = value; }
}
public TreeNode Parent
{
get { return parent; }
set { parent = value; }
}
public TreeNode LChild
{
get { return lChild; }
}
public TreeNode RChild
{
get { return rChild; }
}
public TreeNode(int k, int v)
{
key = k;
val = v;
}
public void SetChild(TreeNode leftChild, TreeNode rightChild)
{
this.lChild = leftChild;
this.rChild = rightChild;
}
public bool isLeaf()
{
if (this.lChild == null && this.rChild == null)
{
return true;
} else
{
return false;
}
}
public bool isParent()
{
if (this.parent == null)
{
return true;
}
else
{
return false;
}
}
public void SetParent(TreeNode Parent)
{
this.parent = Parent;
}
}
因此,如果我在创建树之后放置断点并将鼠标悬停在Visual Studio中的列表上,我可以看到树的结构 - 所有引用都可以从根到叶完美地工作。
但是,如果我执行以下操作:
TreeNode test = newTree[newTree.Count - 1];
请注意:
private List<TreeNode> newTree = new List<TreeNode>();
返回根节点 - 然后将鼠标悬停在一个级别(即左子或右子),但这些孩子在此之后没有任何对他们孩子的引用。
我想知道我是否会将内存中的引用丢失到列表中的其他节点,因为测试节点不是列表的一部分?
非常感谢任何帮助。
由于 汤姆
答案 0 :(得分:1)
你确定没有(注意你的代码中新的和树之间没有空格)
TreeNode test = new Tree[newTree.Count - 1];
哪个会创建一个新的空树数组(可能不是你想要的那样),并使你的原始树没有根,不可访问。
你能确定你的代码是否正确吗?
答案 1 :(得分:0)
好像我发现了问题 - 我没有正确地更新一些父节点及其相关的子节点 - 问题已经解决。
感谢您的帮助 汤姆