コード例 #1
0
    private string GetWord(TrieDataNode node, string prefix)
    {
        TrieDataNode currentNode = _root;
        string       result      = "";

        while (currentNode != node)
        {
            for (int i = 0; i < prefix.Length; i++)
            {
                currentNode = currentNode.GetChildWithChar(prefix[i]);
                result     += currentNode.ToString();
            }
        }
        return(result);
    }
コード例 #2
0
    public List <string> Complete(string baseChars)
    {
        TrieDataNode lastNode = _root;

        for (int i = 0; i < baseChars.Length; i++)
        {
            lastNode = lastNode.GetChildWithChar(baseChars[i]);
            if (lastNode == null)
            {
                return(new List <string>());
            }
        }
        List <string> listOfwords = GetListOfWords(lastNode, baseChars);

        listOfwords.Sort();
        return(listOfwords);
    }
コード例 #3
0
    private bool SearchWord(string wordToSearch)
    {
        TrieDataNode currentNode = _root;

        foreach (var ch in wordToSearch.ToCharArray())
        {
            if (currentNode.GetChildWithChar(ch) == null)
            {
                return(false);
            }
            else
            {
                currentNode = currentNode.GetChildWithChar(ch);
            }
        }

        if (currentNode.IsTerminating == true)
        {
            return(true);
        }
        return(false);
    }
コード例 #4
0
    private List <string> GetListOfWords(TrieDataNode node, string prefix)
    {
        List <string> listOfWords = new List <string>();

        if (node.IsTerminating)
        {
            listOfWords.Add(GetWord(node, prefix));
        }

        if (node.Children != null)
        {
            foreach (var child in node.Children)
            {
                if (child != null)
                {
                    string currentPrefix = prefix;
                    currentPrefix += child.ToString();
                    listOfWords.AddRange(GetListOfWords(child, currentPrefix));
                }
            }
        }
        return(listOfWords);
    }
コード例 #5
0
    public void AddWord(string wordToAdd)
    {
        if (SearchWord(wordToAdd) == true)
        {
            return;
        }

        TrieDataNode currentNode = _root;

        foreach (var ch in wordToAdd.ToCharArray())
        {
            TrieDataNode child = currentNode.GetChildWithChar(ch);
            if (child != null)
            {
                currentNode = child;
            }
            else
            {
                currentNode.AddChild(new TrieDataNode(ch));
                currentNode = currentNode.GetChildWithChar(ch);
            }
        }
        currentNode.IsTerminating = true;
    }
コード例 #6
0
 public AutoComplete()
 {
     _root = new TrieDataNode('-');
 }
コード例 #7
0
 public void AddChild(TrieDataNode newNode)
 {
     Children.Add(newNode);
 }