2016-04-15 12 views
-1

このグループプロジェクトは、テキストファイルを取り込み、種と亜種とそのようなものに切り詰めることになっています。私はチョッピングと木構造を終えましたが、私はBuildGraph()を動作させるのに苦労しています。私はそれをfindNode()関数に絞り込みました。任意の数の子を持つノードのツリー内のノードを見つける

EDIT:コメント、これは私の初めての投稿ですので、醜い場合はごめんなさい。 私はこれらの変更を両方とも別のバージョンで行いましたが、どこかでそれらを取り除くことになりましたか?

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

私はに実行している問題は、再帰呼び出しについての何かであることを確信しているが、より深い行くのではなく、何らかの形で拡大していますセグメンテーションが発生します。

私が探していることが可能かどうか誰かに教えてもらえますか?

if(head->children[0]!=NULL){ 

あなたはchildren[0]アクセスが、子供たちが空であるかどうかをチェックしません:

+1

'return findNode(data、head-> children.at(i));'、あなたが 'return'を見逃しました –

+0

' head'がヌルでないかどうかチェックしないのはなぜですか? –

答えて

1

あなたは2つの問題があります。私はこれがあなたのSegFaultを引き起こすと確信しています。

return findNode(data, head->children.at(i)); 

戻す前にこれがヌルかどうかを確認する必要があります。それがnullの場合は、他の子をチェックしたいと思います。

また、const std::string& dataを渡して、すべての呼び出しで文字列をコピーしないようにしてください。

関連する問題