C#将函数插入BST

时间:2017-01-17 04:54:40

标签: c# insert binary-search-tree

在我开始之前我是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);
    }
}

我觉得没有使用指针就会感到迷茫,即使它在技术上应该更容易不必处理它们。有人可以帮我指出这在逻辑上是不正确的吗?谢谢!

1 个答案:

答案 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);
        }
    }
}