Я довольно новичок в c # и пытаюсь понять что-то довольно простое.
Я хочу реализовать RBTree и связанный список, поэтому я создаю:
public class RBTreeNode
{
// PROPERTIES
public RBTreeNode left;
public RBTreeNode right;
public RBTreeNode parent;
public String Color;
public Int Key;
}
List<RBTreeNode> deleteList = new List<RBTreeNode>();
Во время работы моей программы я выполняю итерацию по дереву, беря некоторые узлы (в зависимости от значения) и добавляя их в deleteList.
вещь, на которую я не могу настроиться, это если, например, у меня есть RBTreeNode X, и я делаю
X.left = null. то, что я хочу, это обнулить левого дочернего элемента X (не затрагивая X.left RBTreeNode, но я думаю, что здесь произойдет, что X.left действительно станет нулевым, но объект X.left RBTreeNode также станет нулевым. не то, что я хочу. (если он скопирован в deleteList, он станет нулевым, что неправильно)
Я хочу быть в состоянии сделать то же самое, что и с c ++, используя указатели.
В C ++ я мог бы сделать это так:
public class RBTreeNode
{
// PROPERTIES
public RBTreeNode* left;
public RBTreeNode* right;
public RBTreeNode* parent;
public std::string Color;
public int Key;
}
Например:
RBTreeNode* tenp = X->left;
X->left = null; //(i think in c# it will turn temp here to null to - of course without pointers)
temp->right = &X;
Какие-либо советы / объяснения?