【问题标题】:Counting leaf node in a trie计算树中的叶节点
【发布时间】:2018-05-07 05:42:08
【问题描述】:

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

【问题讨论】:

    标签: java recursion trie


    【解决方案1】:

    您忽略了递归调用返回的值 (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,因为该节点是叶子节点。
    • @apokryfos 实际上,再三考虑,我认为这不是必需的。当您处理叶节点的父节点时,您将检查该父节点的所有子节点(包括该叶节点)if (node.isWord) 并增加计数。因此node.countLeafNodes() 应该为叶节点返回 0。
    【解决方案2】:

    因此,问题似乎在于,当您从递归返回时,您没有考虑返回的值。我的意思是,在计算子节点中的叶节点时,您不会将该总数添加到父节点中。如果这是你只需要改变的问题

    node.countLeafNodes();  
    

    num += node.countLeafNodes();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-15
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      相关资源
      最近更新 更多