Ejemplo n.º 1
0
        private TrieNodeSearchResult GetNearestTerminalChildren(TrieNode currentNode)
        {
            Queue <TrieNode> serializerQueue = new Queue <TrieNode>();

            serializerQueue.Enqueue(currentNode);

            while (serializerQueue.Count > 0)
            {
                currentNode = serializerQueue.Dequeue();

                if (currentNode.IsTerminal)
                {
                    return(TrieNodeSearchResult.CreateFoundEquals(currentNode));
                }

                if (currentNode.Children != null)
                {
                    foreach (var childNode in currentNode.Children)
                    {
                        serializerQueue.Enqueue(childNode.Value);
                    }
                }
            }

            return(TrieNodeSearchResult.CreateNotFound());
        }
        public static TrieNodeSearchResult CreateNotFound()
        {
            var result = new TrieNodeSearchResult();

            result.Status = TrieNodeSearchResultType.NotFound;

            return(result);
        }
        public static TrieNodeSearchResult CreateFoundEquals(TrieNode node)
        {
            var result = new TrieNodeSearchResult();

            result.Status = TrieNodeSearchResultType.FoundEquals;
            result.Node   = node;

            return(result);
        }
        public static TrieNodeSearchResult CreateFoundStartsWith(TrieNode node, int lastKeywordIndex)
        {
            var result = new TrieNodeSearchResult();

            result.Status           = TrieNodeSearchResultType.FoundStartsWith;
            result.Node             = node;
            result.LastKeywordIndex = lastKeywordIndex;

            return(result);
        }