二叉搜索树的数组实现

时间:2017-12-06 18:29:01

标签: c++ arrays binary-search-tree

我正在使用一维数组创建二叉搜索树。我的问题在于插入功能。

当我输出树时,插入5,8,3,1,4和9会产生正确的索引。但是,当我尝试将9之后的数字添加到树中时,索引不正确。例如,使用前面提到的数字,9的索引为7.如果我插入17,它应该是9的右子,而不是它的索引为15,它的索引是11.

我知道问题在于我如何增加 i ,但我不确定如何修复它。任何帮助表示赞赏。谢谢!

    void insert(int x)             
    {   
    int i = 1;  //Counter

    if (ptr->arr[1] == -1)   //If bst is empty.
    {
        ptr->arr[1] = x;
    }
    else                    
    {
        int *temp = &ptr->arr[1];  //Temp starts at root
        int *parent = NULL;
        while (*temp != -1 && *temp != x)
        {
            if (x < *temp)
            {
                parent = temp;
                temp = &ptr->arr[i*2];
                i++;
            }

            else
            {
                parent = temp;
                temp = &ptr->arr[i*2+1];
                i+=2;
            }

        }

        *temp = x;

    }

1 个答案:

答案 0 :(得分:1)

您将当前节点维护在两个不同的变量中:指向节点的指针保存在temp中,节点的索引保存在i中。这本身 - 尽管可能不是最优的 - 不是问题。但是,您不能保持两个变量的一致性(您更新指针的方式与索引不同)。一个简单的解决方法是使其保持一致:

temp = &ptr->arr[i*2]; //the pointer update is correct
i = i * 2; //same update as above
//...
temp = &ptr->arr[i*2+1];
i = i * 2 + 1; //same update as above

在我看来,完全删除指针temp并始终通过索引访问数组也是一个好主意。这不需要两个变量之间的任何同步。