Я создал функцию для вставки данных в BST, и она отлично работает. Я использовал "pass by reference", и значение "head" должно меняться после каждой вставки. Однако я обнаружил, что "голова" всегда указывает на первое значение, которое я вставил. Может ли здесь кто-нибудь объяснить, почему "голова" указывает на первые данные, которые я вставил?
void insert(node *&head, int val){
if(head == NULL){
head = newNode(val);
}
else{
if(val <head->data)
insert(head->left,val);
else
insert(head->right,val);
}
}
так как функция должна работать, head
никогда не должна меняться или вы потеряете след корня дерева.
пока у вас есть head
указывающая на корень, у вас есть доступ ко всему дереву.
причина, по которой значение не изменяется, когда вы пишете insert(head->left,val);
вы не назначаете новое значение в head
, вы просто передаете ссылку левому ребенку на следующий вызов функции.
void insert(node *&head, int val){
if(head == NULL){
head = newNode(val); // when you call insert() with pointer to root
// which is NULL this will create root node
}
затем, когда вы добавляете данные в корневой узел (whch больше не NULL)
else{ // this will be called and this doesn't create new root node
// but just create nodes at its left or right side
if(val <head->data)
insert(head->left,val);
else
insert(head->right,val);
}
}