BST вставка с C ++

0

Я создал функцию для вставки данных в 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);
}
}
Теги:
binary-search-tree

2 ответа

0
Лучший ответ

так как функция должна работать, head никогда не должна меняться или вы потеряете след корня дерева.

пока у вас есть head указывающая на корень, у вас есть доступ ко всему дереву.

причина, по которой значение не изменяется, когда вы пишете insert(head->left,val);

вы не назначаете новое значение в head, вы просто передаете ссылку левому ребенку на следующий вызов функции.

0
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);
}
}
  • 0
    благодарю вас. Это имеет смысл. когда первый узел создан, голова меняется. Следующие узлы просто меняют head-> left, head-> right и т. Д.
  • 0
    именно это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню