探索二叉搜索树

时间:2013-05-02 20:38:33

标签: data-structures autocomplete binary-tree trie ternary-search-tree

我认为二分查找树是最简单的例子,但我真的想知道如何探索三元搜索树或各种尝试。我对这些没有任何经验,但我理解添加和搜索它们的概念。

我的问题是,当我找到一个与我的输入匹配的节点(比如自动完成)时,如何有效地收集所有子节点?

2 个答案:

答案 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以指示单词的结尾。根据您的应用和使用情况,您可以使用或不使用它。