我有一个 trie ,其中每个节点都是一个对象TrieNode
,如下所示:
public char content;
public double count;
public LinkedList<TrieNode> childList;
我必须计算trie中特定字符的出现次数。
我想总结count
我正在寻找content = char
的节点字段。
所以这就是我所做的:
int occ = occurrencesOfChar(0, root, c);
public int occurrencesOfChar(int occ, TrieNode node, char c) {
for(TrieNode child : node.childList) {
if(child.content == c) {
occ += child.count;
}
occ += occurrencesOfChar(occ, child, c);
}
return occ;
}
但是结果被高估了,比实际发生的更多。 为什么呢?
答案 0 :(得分:3)
您已多次添加occ
,因为您已将其作为参数传递。
您应该使用局部变量:
public int occurrencesOfChar(TrieNode node, char c) {
int occ = 0;
for(TrieNode child : node.childList) {
if(child.content == c) {
occ += child.count;
}
occ += occurrencesOfChar(child, c);
}
return occ;
}