所以我有这个小组项目应该接受一个文本文件,把它切成物种和亚种以及那种东西。我已经完成了斩波和树形结构,但我很难让我的BuildGraph()工作。我已将其缩小到现在看起来像
的findNode()函数编辑:评论,这也是我第一次发帖,如果它很丑,那就很抱歉。 我在不同的版本中进行了这两项更改但最终在某处摆脱了它们?
Node* findNode(std::string data, Node* head){
if (head == NULL){
return NULL;
}
else if(head->data == data){
return head;
} else {
if(head->children[0]!=NULL){
for(int i = 0; i<head->children.size();i++){
return findNode(data, head->children.at(i));
}
}
}
我的节点结构看起来像这样......
public:
std::string data;
std::vector <Node*> children;
Node(std::string data){
this->data=data;
}
我非常确定我遇到的问题是关于递归调用的问题正在深入而不是以某种方式扩展导致段错误。
有人可以告诉我,我期待做什么是可能的吗?
答案 0 :(得分:1)
你有两个问题:
if(head->children[0]!=NULL){
您可以访问children[0]
,但不要检查儿童是否为空。我很确定这会导致你的SegFault。
return findNode(data, head->children.at(i));
在返回之前,您需要检查它是否为null。如果它为空,你想检查其他孩子。
同时传递const std::string& data
,以便您不会在每次通话时复制字符串。