首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二叉树和链表,保留C中的头节点

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

Stack Overflow用户
提问于 2014-11-20 06:20:15
回答 1查看 197关注 0票数 0

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

当试图向链接列表中添加一个额外的位置节点时,我的麻烦就来了。我传递附加位置--二叉树的顶部根,我想将顶部根返回到我的主函数,除非添加了一个新的location节点。当一个业务被确认匹配时,我运行这些函数。我需要附加返回二叉树,修改为有另一个位置节点,在一个二进制节点。

代码语言:javascript
复制
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);  

下一个位置没有添加

代码语言:javascript
复制
    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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 07:03:02

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

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

试图传递BT的root节点的head指针,而不是在该业务节点中传递链接列表的head指针。相反,它应该是;

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

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

还有,你的功能;

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

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

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27033060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档