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

标签 c struct linked-list

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

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

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

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

还有你的函数;

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

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

希望这有帮助。

关于c - 二叉树和链表,C中保留头节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27033060/

相关文章:

c - 体系结构 x86_64 错误的 Makefile 重复符号?

c - 使用冒泡排序对结构数组进行排序 - 如何加速结构成员的交换

struct - 如何类型转换和继承 Rust 结构?

dictionary - 在结构中声明和使用映射

c - 为什么我的链表代码在删除头节点时会产生段错误?

c - 双向链表正确打印所有内容但在打印功能结束时收到段错误

c++ - (核心转储)C++ 中的链表

c - 在 do-while 循环中确定用户输入的变量是否为质数

c - Linux 中重写 malloc、free 和 calloc 会导致递归

c++ - 一元 ‘*’ 的无效类型参数(有 ‘int’ )