二叉树和链表,保留 C 中的头节点



我创建了一个包含许多不同业务的二叉树。树上的每个节点都是一个单独的、独特的业务。这些业务中的每一个都可能有多个位置。这些位置存储在一个简单的单向链表中。

尝试将其他位置节点添加到链表时,我的麻烦来了。我将附加位置传递给二叉树的顶部根,我想将顶部根返回到我的主函数,除非添加了一个新的位置节点。当确认业务匹配时,我会运行这些功能。我需要追加以返回二叉树,修改为在其中一个二元节点上具有另一个位置节点。

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;
}

只是为了通过阅读您的问题来澄清; 您正在尝试通过将新位置附加到该业务节点的链接列表中来修改BT中的现有业务(节点)。那么我认为,对于您的每个业务节点,您很可能会有一个指向链表开头的头部指针。从这里,您可以遍历列表并添加新的位置节点。如果是这种情况,那么您的陈述;

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

尝试传递 BT 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

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新