我正在使用ref,以便它改变我想要创建的二进制搜索树的根,但是,它没有按照我打算的方式工作。
EVP_aes_256_ctr
我期待当我 public BinaryNode<T> Root { get; set; }
public BinaryTree() : base()
{
Root = null;
public T Insert(ref BinaryNode<T> root, T val)
{
// Insert here
if (root == null)
{
BinaryNode<T> newNode = new BinaryNode<T>(val);
root = newNode;
Size++;
return val;
}
if (val.CompareTo(root.Data) < 0)
{
BinaryNode<T> left = root.LeftChild;
return Insert(ref left, val);
}
else if (val.CompareTo(root.Data) > 0)
{
BinaryNode<T> right = root.RightChild;
return Insert(ref right, val);
}
return val;
}
public override T Insert(T val)
{
BinaryNode<T> root = Root;
return Insert(ref root, val);
}
时,例如Root会在第一次插入期间发生变化。然而,这种情况并非如此。 Root仍然保持null。我怀疑这是与属性更相关的内容以及它与ref的交互方式而不是ref本身?
答案 0 :(得分:3)
您正在修改本地根变量,因为它是您传入的引用。如果您希望这样做,您需要将其分配回Root属性,如下所示:
public T Insert(T val)
{
BinaryNode<T> root = Root;
var result = Insert(ref root, val);
Root = root;
return result;
}
或许更清晰的选择是直接使用属性的支持字段,如下所示:
BinaryNode<T> _root;
public BinaryNode<T> Root
{
get { return _root; }
set { _root = value; }
}
public T Insert(T val)
{
return Insert(ref _root, val);
}