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); }