2014-11-20 7 views
0

Я создал двоичное дерево из нескольких разных предприятий. Каждый узел на дереве - это отдельный, уникальный бизнес. У каждого из этих предприятий может быть несколько мест. Эти местоположения хранятся в простом, отдельно связанном списке.Двоичное дерево и связанный список, удерживая головной узел в C

Моя проблема возникает при попытке добавить дополнительный узел местоположения в связанный список. Я передаю append расположение верхнего корня двоичного дерева, я хочу вернуть верхний корень к моей основной функции, за исключением добавления нового узла местоположения. Когда бизнес подтвержден, я выполняю эти функции. Мне нужно добавить, чтобы вернуть двоичное дерево, модифицированное, чтобы иметь другой узел местоположения, на одном из двоичных узлов.

BusinessNode *appendLocation(char * name, BusinessNode * root, FILE * LocPtr){ 

    BusinessNode * temp = root; 
    LocationNode * newLoc = NULL; 
    newLoc = create_LocationNode(LocPtr); 
    temp = tree_search_name(name, root); //will return location where matching biz is found 
    temp->head = addLoc(root->head,newLoc); 
    printf("temp->head->next->LocPtr %ld", temp->head->next->LocPtr); 

Segfault следующее место не получает добавил

return root; // somehow needs to return the whole modified binary tree 
} 



LocationNode * addLoc(LocationNode* root, LocationNode * newLoc){ 

    if(root != NULL){ 
     root -> next = addLoc(root->next, newLoc); 
    } 
    return root; 
} 
+1

'addLoc' - это рекурсивная функция, которая абсолютно ничего не делает. – JS1

ответ

0

Просто для уточнения от чтения вашей проблемы; вы пытаетесь изменить существующий бизнес (узел) в своем BT, добавив новое местоположение в связанный список этого бизнес-узла. Я предполагаю, что для каждого из ваших бизнес-узлов у вас, скорее всего, будет указатель на начало вашего связанного списка. И отсюда вы можете пересечь список и добавить новый узел местоположения. Если это так, то ваше заявление;

temp->head = addLoc(root->head,newLoc);

пытается передать указатель глава root узла БТ вместо head указателя связанного списка в этом бизнес-узле. Скорее, это должно быть;

LocationNode * new_location = addLoc (temp->head, newLoc);

Becase temp->head теперь главный указатель на связанный список найденного узла бизнес вернулся из temp = tree_search_name(name, root);.

Кроме того, ваша функция;

LocationNode * addLoc(LocationNode* root, LocationNode * newLoc)

не добавляет новый узел местоположения в связанном списке. Он просто рекурсивно пересекает список и возвращает последний узел связанного списка. Вам нужно добавить последний узел списка с новым узлом местоположения - newLoc.

Надеюсь, это поможет.

Смежные вопросы