为什么这个插入函数不会更新我的二叉搜索树?

时间:2017-04-15 18:18:49

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

我基本上是想在我的树中插入一个数字。最初我传递命令insert(root,10),然后我的函数以递归方式遍历树以插入值。遍历工作正常,但我的树不会更新。我已经通过构造函数在这个类中构建了一个树。在插入函数之前对我的树的顺序遍历是{0,1,2,3,4,5,6,7,8,9},并且在插入之后它也是相同的

  

我的插入功能:

private: 

node* root

void insert(node* ptr, int num) {
            if (ptr == NULL) {
                    ptr = new node;
                    ptr->data = num;
                    ptr->left = NULL;
                    ptr->right = NULL;
                    return;
            }

            else if (ptr->data >= num) {
                    insert(ptr->left, num);
            }

            else if (ptr->data < num) {
                    insert(ptr->right, num);
            }
    }
  

我班级的私人成员创建初始树

node* createTree(int array[], int start, int end) {

            if(start > end) {
                    return NULL;
            }

            int mid;
            node* newNode = new node;

            if (((start + end) % 2) != 0) {
                    mid = ((start + end) / 2) + 1;
            }

            else {
                    mid = (start + end) / 2;
            }      

            newNode->data = array[mid];
            newNode->left = createTree(array, start, mid - 1);
            newNode->right = createTree(array, mid + 1, end);

            cout << newNode->data << " " << newNode << endl;

            return newNode;
    }
  

构造函数

BST(int array[], int length) {
            root = createTree(array, 0, length - 1);
    }

1 个答案:

答案 0 :(得分:0)

您需要确保在分配新节点时更新父级。一种方法是让insert返回节点指针:

node* insert(node* ptr, int num) {
        if (ptr == NULL) {
                ptr = new node;
                ptr->data = num;
                ptr->left = NULL;
                ptr->right = NULL;
        } else if (ptr->data >= num) {
                ptr->left = insert(ptr->left, num);
        } else {  // ptr->data < num 
                ptr->right = insert(ptr->right, num);
        }
        return ptr;
}