我正在尝试在C#中实现二叉搜索树,并遵循Cormen等人的第12章来实现它。为此,我需要使用可空类型,如下所示:
public int insert(Node newNode) // return array index of added node
{
int? y = null;
int? x = this.root;
while (x != null)
{
y = (int)x;
if (newNode.key < this.tree[x])
{ }
}
return 0;
}
现在我收到以下错误:
无法隐式转换类型'int?' 'int'。 存在显式转换(您是否错过了演员表)?
对于此if (newNode.key < this.tree[x])
行。
使用可空类型来访问数组索引是不合法的吗?
我可以以不同的方式初始化阵列以允许它吗?
或者我应该忘记null并使用-1例如?
答案 0 :(得分:1)
无法隐式转换类型'int?' 'int'。
你想比较一个int?到一个int。编译器本质上是在说“如果int?实际上是null,我应该怎么做这个比较。这是编译器无法解决的问题,所以你必须提供那个逻辑。
换句话说,既然您已经防止x为null,请使用
this.tree[x.Value]
答案 1 :(得分:0)
您有x != null
约束,您只需要this.tree[x.Value]
。
并不清楚y
是什么,但我怀疑你是否需要或想要(int)
演员。此外,重要的是tree[x]
和newNode.key
的类型。
使用可空类型访问数组索引是不合法的吗?
是
我可以以不同的方式初始化数组以允许它吗?
没有
或者我应该忘记null并使用-1例如?
这取决于。如果正确完成,两者都是可行的。
答案 2 :(得分:0)
检查变量HasValue
是否存在使用Value
public int insert(Node newNode) // return array index of added node
{
int? y = null;
int? x = this.root;
while (x.HasValue)
{
y = x;
if (newNode.key < this.tree[x.Value])
{
//your logic here
}
}
return 0;
}