在Java中从树中拉出前10个值

时间:2017-03-08 17:27:07

标签: java tree

我正在开发一个涉及树结构的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);
    }

1 个答案:

答案 0 :(得分:0)

看起来你有一个树形结构。收集信息的最简单方法就是在传递收集信息的对象时,遍历整个树(使用递归,而不是while循环)。例如,既然您想查看哪些名称最受欢迎,我会使用HashMap,其中键是名称,值是名称的计数。然后使用地图随意走树(预订,后期订购等),增加每个节点名称的计数。