我基本上是想在我的树中插入一个数字。最初我传递命令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);
}
答案 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;
}