从Java中的树中提取前10个值

从Java中的树中提取前10个值,java,tree,Java,Tree,我正在开发一个Java程序,它包含一个树结构,并且已经为一个特定的方法奋斗了一段时间。该方法应该搜索整个树,并找到计数最高的10个名称。我一直在尝试使用if语句来实现这一点,它本质上说“如果它低于上一个最大值,但高于任何其他值,请打印它”。问题是我的方法只是将最流行的名字打印10次,而不是打印10个最流行的名字。非常感谢您的帮助。谢谢 public static void mostPopularNameTree(){ popular(root,new Name("-1",'G',-1,-

我正在开发一个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);
    }
公共静态void mostPopularNameTree(){
popular(根,新名称(“-1”,'G',-1,-1),0);
}
私有静态void popular(节点本地,名称prev,int i){
Name current=local.data;
int max=0;

while(i看起来你有一个树结构。收集你想要的信息的最简单方法是遍历整个树(使用递归,而不是
while
循环)传递收集信息的对象时。例如,由于您想查看哪些名称最受欢迎,因此我会使用
HashMap
,其中键是名称,值是名称的计数。然后根据需要遍历树(预排序、后排序等)使用映射,增加每个节点上的名称计数。

在while循环中打印
current
,并且从不更新它。