2017-03-08 31 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,其中鍵是名稱,值是名稱的計數。然後按照你想要的方式(預先訂購,後期訂購等等),使用地圖步行樹,增加每個節點名稱的計數。