我创建了一个包含许多不同业务的二叉树。树上的每个节点都是一个独立的,独特的业务。这些业务中的每一个都可能有多个位置。这些位置存储在一个简单的单链表中。
尝试将其他位置节点添加到链接列表时遇到了麻烦。 我将附加位置传递给二叉树的顶部根,我想将顶部根返回到我的main函数,除非添加了新的位置节点。当确认某个企业匹配时,我会运行这些功能。我需要追加返回二进制树,修改为在另一个二进制节点上有另一个位置节点。
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;
}
答案 0 :(得分:0)
只是从阅读你的问题来澄清;您正尝试通过将新位置附加到该业务节点的链接列表来修改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
附加列表的最后一个节点。
希望这有帮助。