2017-03-08 13 views
0

私は、ツリー構造を含むJavaプログラムに取り組んでいます。この方法ではツリー全体を検索し、最大の数を持つ10の名前を見つけることになっています。私は本質的に「最後の最大値よりも低いが他の値よりも高い場合はそれを印刷する」というif文を使用してこれを試みてきました。問題は、私の方法が、最も一般的な10の名前を印刷するのではなく、10の最も一般的な名前を印刷することです。どんな助けでも大歓迎です。ありがとう!Javaのツリーから上位10個の値を引き出す

public static void mostPopularNameTree(){ 
    popular(root,new Name("-1",'G',-1,-1),0); 
} 

private static void popular(Node local, Name prev, int i){ 

    Name current = local.data; 
    int max = 0; 

    while(i<10){ 

     if(current.getCount()<prev.getCount() && current.getCount()>max){ 
      max = current.getCount(); 
      prev = current; 

      if(local.left != null){ 
       popular(local.left, prev, i); 
      } 

      if(local.right != null){ 
       popular(local.right, prev, i); 
      } 
     } 
     i++; 
     System.out.println(current); 
    } 
+0

whileループで 'current'を表示していて、それを更新していません。 – Jeremy

答えて

0

あなたはツリー構造を持っているようです。あなたが求めているような情報を収集する最も簡単な方法は、情報を収集するオブジェクトを渡しながら、ツリー全体を歩くことです(再帰を使用し、whileループではありません)。たとえば、どの名前が最も人気があるのか​​を知りたいので、HashMapを使用します。ここで、キーは名前で、値は名前のカウントです。次に、マップを使用してツリーを歩いて(プリオーダー、ポストオーダーなど)、各ノードの名前の数を増やします。

関連する問題