我正在实现遍历Trie的方法(更具体地说,我正在尝试计算叶节点的数量。进入这些叶节点的边缘都带有终止符“#”)。
我正在使用Java,使用此方法时出现错误:
public int traverse(Node n){
for(int i=0; i<n.getNumEdges(); i++){
if(n.getEdgeChar(i) == '#'){
return 1;
}
else{
return traverse((n.getEdge(i)).getNode());
}
}
}
我知道为什么会收到此错误,但是如何解决呢?最初,我认为最好将
noLeaves
作为参数传递,但是经过一些研究,我发现上述代码被认为是更好的做法。我只是不知道如何解决此编译器错误。任何帮助,将不胜感激!
最佳答案
我在这里有点猜测,但是我认为以下是您的意图?
public int traverse(Node n){
int numOfLeaves = 0;
for (int i=0; i<n.getNumEdges(); i++) {
if(n.getEdgeChar(i) == '#') { // leaf
numOfLeaves += 1;
}
else {
numOfLeaves += traverse((n.getEdge(i)).getNode());
}
}
return numOfLeaves;
}
这将求和所有边的递归调用的结果并返回总和。假定
#
指示叶子,并且其总和将计为1,而不是进行递归调用。
关于java - 使用递归时Java编译器错误 'missing return statement',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41587736/