2016-05-12 11 views
0

私は構造を持つツリーを持っています。私は数が最大(与えられた)分を見つける必要があります。ツリー内の特定のアイテムを見つける(C)

Item this_word (link h, int max){ 
     Item word; 
     if (h == NULL) 
      return 0; 
     if (h->item->acc == max){ 
      word = h->item; 
      this_word(h->l, max); 
     } 
     else{ 
      this_word(h->l, max); 
      this_word(h->r, max); 
     } 
     return word; 
    } 

しかし、私はセグメンテーションフォールトを取得。..

+0

リンク変数はポインタですか?あなたは1つのようにそれにアクセスしているから – BackDoorNoBaby

+0

あなたのsegfaultはどこですか?デバッガでプログラムを実行しましたか? 'Item'と' link'タイプの定義を示してください。 – Martin

+1

@BackDoorNoBabyのtypedefsは悪いです –

答えて

0

あなたのコードセグメンテーション違反h!= NULLh->item->acc == maxが成り立ちます。この場合、elseブランチが実行され、前に設定されていないwordが返されます。単語に適切に値を割り当てることでこれを解決できます。

Item this_word (link h, int max){ 
     Item word; 
     if (h == NULL) { 
      return 0; 
     } 
     if (h->item->acc == max) { 
      word = h->item; 
      this_word(h->l, max); 
     } else { 
      // assign a certain value to word 
      this_word(h->l, max); 
      this_word(h->r, max); 
     } 
     return word; 
    } 

は、私の知る限り見ることができるようにあなたのコードは、1つは完全にあなたの質問をもとにしてしようとしているかを理解することはできませんので、場合である、少し奇妙です。アンサーの品質を向上させるために、より良い質問を提供する(コードの追加、文脈の説明など)

+0

私はまだセグメンテーション違反を取得します。構造体には文字列と数値があります。ツリーは文字列を通して編成され、与えられた番号を持つ構造体を返したいと思います。その番号の "one"と "computer"のような2つがある場合、アルファベット順であるので "computer"を返すようにします。 – Heather

+1

@Heatherしたがって、ツリーは文字列に関してソートされます。そして、あなたは特定の数字を持つ "最小の"文字列を取得したいですか?あなたは間違いなくあなたの質問にこれを加えてください!ツリーは適切に初期化されていますか? NULLが返された場合、segfaultが発生する可能性がありますか?私はもっ​​とコードが必要だと思います。 – jboockmann

+0

私は 'void init(){ head = NULL; } 'を使用してツリーを初期化します。 NULLが返されるときは? – Heather

関連する問題