计算树中出现的次数

Counting Occurrences in a tree

我似乎找不到问题的答案,所以我来了。我有一棵树,里面填满了文件中的字符串,需要计算一个字符串被看到的次数。所以一切正常,除了我正确地计算字符串。 所以这是我尝试计算每个字符串出现次数的代码。

/* Function for postorder traversal */
public void postorder(Scanner file)
{
    postorder(root,file);
}

private void postorder(BSTNode r,Scanner file)
{
    int counter = 0;
    String key;
    if (r != null)
    {
        key = file.next();
        postorder(r.getLeft(),file);
        postorder(r.getRight(),file);
        if(key.compareTo(r.getData()) == 0)
        {
            counter++;
        }
    System.out.println(r.getData() +", " + counter); 
    }
}

如果有帮助,这是我得到的控制台输出:

McGurkus, 0 
Kircus, 0
call, 0
I'll, 0
I, 0
circus, 0
it, 0
my, 0
for, 0
put, 0
tents, 0
think, 0
the, 0
up, 0
to, 0
ready, 1
All, 1

一切都应该是 1。非常感谢任何对我可以得出解决方案的帮助或指导。

如果您的树已经有了数据,并且您正在遍历树以查找每个单词的频率,那么您需要该文件有什么用?

我不知道你的要求是什么,但我建议在 class 上保留一个数据结构(比如地图),其中键是单词,值是频率每当您查看树节点时都会更新。

类似于:

private Map map = new HashMap();

 private void postorder(BSTNode r)
 {
     String key;
     if (r != null)
     {
         key = r.getData();
         if(map.containsKey(key)){
            Integer value = (Integer)map.get(key);
            map.put(key, ++value);
         }
         postorder(r.getLeft(),file);
         postorder(r.getRight(),file);

         System.out.println(r.getData() +", " + counter); 
     }
 }