private void GetAll(Node node, TrieBuffer buffer, StringBuilder wordBuilder) { if ((buffer.Index == DistinctCount) || (node == null)) { return; } if (node.Left != null) { if (node == _root) { wordBuilder.Clear(); } GetAll(node.Left, buffer, new StringBuilder(wordBuilder.ToString())); } if (node.Middle != null) { wordBuilder.Append(node.Symbol); GetAll(node.Middle, buffer, wordBuilder); } if (node.Right != null) { if (node == _root) { wordBuilder.Clear(); } else { if (wordBuilder.Length > 0) { wordBuilder.Remove(wordBuilder.Length - 1, 1); } } GetAll(node.Right, buffer, new StringBuilder(wordBuilder.ToString())); } if (node.Counter > 0) { wordBuilder.Append(node.Symbol); buffer.Add(wordBuilder.ToString(), node.Counter); } if (wordBuilder.Length > 0) { wordBuilder.Remove(wordBuilder.Length - 1, 1); } }
public WordCounterPair[] GetAll() { if (_root == null) { return(new WordCounterPair[0]); } var buffer = new TrieBuffer(DistinctCount); GetAll(_root, buffer, new StringBuilder()); return(buffer.Items); }