我有下面的contains方法来检查基数trie数据结构中是否有单词可用。要查找我在这里使用的单词,请调用方法contains
的recursiv调用。但是,当我向上移动变量available
的值被更改为false时,我发现这个过程将布尔变量true
存储为available
时遇到问题。 / p>
如果available
变量被赋值为true,我怎样才能保留真值?
代码:
private boolean contains(TrieNode node, String s) {
boolean available = false;
String communsubString = checkEdgeString(node.getNext(), s);
String restString = s.substring(communsubString.length());
if (node.getNext() != null && !node.getNext().isEmpty()) {
for (TrieNode nextNodeEdge : node.getNext()) {
if (nextNodeEdge.getEdge().equals(communsubString)) {
if (!restString.isEmpty()) {
contains(nextNodeEdge, restString);
} else {
// I want to keep the true value if I was here once.
available = true;
}
}
}
}
return available;
}
答案 0 :(得分:1)
您可以将didPressCancel
的当前值与调用available
的结果进行或:
contains
然后你可以做一些快速休息以更快地返回,所以你不必继续检查其他节点,因为它们永远不会使值为false:
available |= contains(nextNodeEdge, restString);
或更简洁:
if (!restString.isEmpty()) {
available |= contains(nextNodeEdge, restString);
} else {
// I want to keep the true value if I was here once.
available = true;
}
if (available) break;
答案 1 :(得分:1)
一旦你找到了什么,就可以一直回归:
private boolean contains(TrieNode node, String s) {
String communsubString = checkEdgeString(node.getNext(), s);
String restString = s.substring(communsubString.length());
if (node.getNext() != null && !node.getNext().isEmpty()) {
for (TrieNode nextNodeEdge : node.getNext()) {
if (nextNodeEdge.getEdge().equals(communsubString)) {
if (!restString.isEmpty()) {
if ( contains(nextNodeEdge, restString) ) {
return true;
}
} else {
return true;
}
}
}
}
return false;
}