计算trie中的叶节点

时间:2018-05-07 05:42:09

标签: java recursion trie

我想通过计算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;
    }

2 个答案:

答案 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();