我有一个特里,每个节点都是这样的对象TrieNode

public char content;
public double count;
public LinkedList<TrieNode> childList;


我不得不数出特里里特定字符的出现。
我想总结一下我正在寻找的具有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;
}


但是结果被高估了,返回的事件比实际发生的更多。
为什么?

最佳答案

您要多次添加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;
}

10-05 18:02