我认为二分查找树是最简单的例子,但我真的想知道如何探索三元搜索树或各种尝试。我对这些没有任何经验,但我理解添加和搜索它们的概念。
我的问题是,当我找到一个与我的输入匹配的节点(比如自动完成)时,如何有效地收集所有子节点?
答案 0 :(得分:2)
这取决于搜索树的实现。如果获取特定节点的所有子节点是您需要执行的常见操作,则应使用使该操作有效的实现。
例如,对于每个节点,您可以存储一个子数组,该数组包含指向每个节点子节点的指针。
答案 1 :(得分:2)
对于Trie,您应该将Node结构设为
class Node
{
char data;
ArrayList<Node> children;
public Node getChild(char data)
{
for(Node child : this.children)
if(child.data == data)
return child;
return null;
}
}
每个节点将包含一个字符及其子节点列表
所以你的搜索会像这样的东西
public boolean search(String s)
{
Node current = root; // root is the Node present in Trie
for(int i=0; i<s.length(); i++)
{
char c = s.charAt(i);
Node n = current.getChild(c);
if(n==null)
return false; // Match not present
current = n;
}
return true; // Match found
}
上述搜索方法只检查搜索到的字符串是否存在于您的trie中。您可以调整它以根据您的要求收集所有孩子(这是为您保留:))
希望这可以帮助您并让您知道如何收集它。 如果需要任何帮助填充trie。请告诉我们!
注意在Trie节点中,您还可以维护boolean marker
以指示单词的结尾。根据您的应用和使用情况,您可以使用或不使用它。