У меня очень странная проблема. По сути, я создал класс под названием TreeNode, который представляет узел в дереве. Затем я создаю дерево, добавляя все узлы в список.
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>();
, который возвращает корневой узел - и снова наведите указатель мыши. Я могу перейти на один уровень ниже (т. Е. Левый или правый потомок), но после этого у этих детей нет ссылок на своих потомков.
Мне интересно, теряю ли я ссылку в памяти на другие узлы в списке, поскольку тестовый узел не является частью списка?
Любая помощь будет принята с благодарностью.
Спасибо
Том