我正在开发一个涉及树结构的Java程序,并且一段时间以来一直在努力使用某种特定方法。该方法应该搜索整个树并找到具有最高计数的10个名称。我一直试图通过使用if语句来实现这一点,该语句基本上表示"如果它低于最后一个最大值但高于任何其他值,则打印它"。问题是我的方法只是打印最流行的名字10次,而不是打印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 :(得分:0)
看起来你有一个树形结构。收集信息的最简单方法就是在传递收集信息的对象时,遍历整个树(使用递归,而不是while
循环)。例如,既然您想查看哪些名称最受欢迎,我会使用HashMap
,其中键是名称,值是名称的计数。然后使用地图随意走树(预订,后期订购等),增加每个节点名称的计数。