我想通过计算trie中有多少个单词来计算trie结构中有多少个叶子节点,但是我的代码没有更新计数值,而是总是重置为0。
int num = 0;
public int countLeafNodes() {
for (char c : children.keySet()) {
Trie node = children.get(c);
System.out.println(c);
if (node.isWord) {
num++;
System.out.println(num);
}
node.countLeafNodes();
}
return num;
}
答案 0 :(得分:0)
您忽略了递归调用返回的值(node.countLeafNodes()
)。
尝试:
public int countLeafNodes()
{
int num = 0;
for (char c : children.keySet()) {
Trie node = children.get(c);
System.out.println(c);
if (node.isWord) {
num++;
System.out.println(num);
}
num += node.countLeafNodes();
}
return num;
}
答案 1 :(得分:0)
因此,问题似乎是当您从递归返回时,您没有考虑所返回的值。我的意思是,在计算子节点中的叶节点时,您不会将该总数添加到父节点。如果这是问题,您只需要更改
node.countLeafNodes();
到
num += node.countLeafNodes();