【问题标题】:Counting Occurrences in a tree [duplicate]计算树中的出现次数[重复]
【发布时间】:2015-04-24 00:13:03
【问题描述】:

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

/* 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。任何帮助或指导我可以从哪里获得解决方案将不胜感激。

【问题讨论】:

  • 这里可能需要多看一点代码,比如r.getData()返回什么数据类型? (将println 上面的一行移动到第二级if 块内可能???)输入文件是什么样的?
  • 显然,比较有问题,它没有返回零,因此没有增加counter,而counter 等于零。我会通过观察key 是什么来开始调试。
  • @BretC r.getData() 显然是节点的内容(类型String)@Adriel dwood 我猜问题是从文件生成的树不同,而不是你在你的后序法。能否请您发布生成树的方法
  • @Paul 只是检查 ;)
  • 您在遍历树时迭代文件键:只有当树以与此处读取的相同 DFS 顺序填充时,您才会获得匹配项;您的方法所做的是检查树和文件是否是相同的数据。如果要计算出现次数,则需要使用 Map (key,count)

标签: java tree


【解决方案1】:

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

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

类似:

私有 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); 
     }
 }

【讨论】:

  • 是的,我明白你在说什么,我试过了,它奏效了。感谢您的输入。这让我很困扰。
猜你喜欢
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多