/// <summary>
/// DFS traversal starting from given TrieNode and yield.
/// </summary>
private IEnumerable <TResult> Traverse <TResult>(TrieNode <TValue> trieNode,
StringBuilder buffer, Func <StringBuilder, TValue, TResult> transform)
{
if (trieNode == null)
{
yield break;
}
if (trieNode.HasValue())
{
yield return(transform
(
buffer, trieNode.Value
));
}
foreach (var child in trieNode.GetChildren())
{
// buffer is not used always but it's ok
buffer.Append(child.Character);
foreach (var item in Traverse(child, buffer, transform))
{
yield return(item);
}
buffer.Length--;
}
}