在我开始之前我是Stack Overflow的新手,所以我为这篇文章中任何格式不正确的细节道歉,请在需要的地方纠正我。
无论如何,对于我的问题,我也是C#的新手,我对C ++相当不错,但我现在需要学习C#。我正在研究BST的插入功能,但我似乎无法弄清楚我的错误。当我运行代码时,root会不断被替换。我插入值5,然后插入值6,然后我的树只包含值6.我相信它是如何使用我的属性Root.Num / .Left / .Right。
这是我的代码段:
private void insertHelper(int value, BSTNode root)
{
if (this.Root == null) //empty tree, make new node
{
BSTNode node = new BSTNode(value);
this.Root = node;
}
else if (value < this.Root.Num)
{
insertHelper(value, Root.Left);
}
else if (value > this.Root.Num)
{
insertHelper(value, Root.Right);
}
}
我觉得没有使用指针就会感到迷茫,即使它在技术上应该更容易不必处理它们。有人可以帮我指出这在逻辑上是不正确的吗?谢谢!
答案 0 :(得分:0)
因为无论你传递什么参数,你总是使用this
。立即修复使用传递为root
的参数。此外,您需要确保进行适当的空检查 -
假设第一次调用是这样的 - insertHelper(//value, //the root node)
,以下方法可能会起作用
private void insertHelper(int value, BSTNode root)
{
if (root == null) //empty tree, make new node
{
BSTNode node = new BSTNode(value);
this.Root = node;
}
else if (value < root.Num)
{
if(root.Left != null){
insertHelper(value, root.Left);
}else{
root.Left = new BSTNode(value);
}
}
else if (value > root.Num)
{
if(root.Right!= null){
insertHelper(value, root.Right);
}else{
root.Right= new BSTNode(value);
}
}
}