【问题标题】:Binary Tree and Linked List, Retaining the head node in C二叉树和链表,在C中保留头节点
【发布时间】:2014-11-20 06:20:15
【问题描述】:

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

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

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

【问题讨论】:

  • addLoc 是一个绝对什么都不做的递归函数。

标签: c struct linked-list


【解决方案1】:

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

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

正在尝试传递 BT 的 root 节点的头指针,而不是该业务节点内链表的 head 指针。相反,应该是;

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

因为temp->head现在是temp = tree_search_name(name, root);返回的找到的业务节点的链表的头指针。

还有你的功能;

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

不会将新的位置节点附加到链表中。它只是递归地遍历链表并返回链表的最后一个节点。您需要将列表的最后一个节点附加到您的新位置节点 - newLoc

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 2013-07-06
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多