java-loop里面的递归方法

时间:2017-05-14 16:10:43

标签: java

我有一个名为TrieNode的类,它有一个char键和triNode的arrayList。我正在尝试实现一个特里。

结构:

something like this

例如,根键是'。'孩子们是t,o,s和p。对于具有键's'的节点,子节点为t和p。我想计算trie中的节点数。我用过这个算法

public int size(TrieNode tmp, int n){

    if(tmp.children.isEmpty()){
        return 0;
    }

    for(int i=0;i<tmp.children.size();i++){
        return 1 + size(tmp.children.get(i), n);
    }


    return 1;
}

问题是我并不是每次通话都是唯一的。所以这个方法在根上调用然后是子项t然后是t然后是o直到p。当它再次返回s时,它不会调用p上的方法。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题是你退出第一个元素的循环。如果要对所有元素求和,则需要在返回父级之前对递归结果求和。

public int size(TrieNode tmp, int n){

    int sum = 0;
    for(int i=0;i<tmp.children.size();i++){
        sum +=  size(tmp.children.get(i), n);
    }

    if(/* node has char n */){
      return sum + 1;
    }
    return sum ;
}

答案 1 :(得分:0)

对此算法使用 DFS 。您访问的每个节点都是子节点。在访问该子节点后总结计数。做这样的事情..

//the root is the first node to be passed on.**
void size(TrieNode node){
if(node is null) return;
if(node is not null) result.add(node);

 while(there exist childNode in node){
   size(childNode);
}
}

Result是一个包含树的所有节点的ArrayList。 result.size()为您提供树中的节点数。