public void Add(string word, int pos = 0) { if (pos == word.Length) { if (word.Length > 0) { words.Add(word); } return; } var currentChar = word[pos]; int edgeIndex = 0; try { edgeIndex = letterMaps[currentChar]; } catch (Exception) { } if (edges[edgeIndex] == null) { edges[edgeIndex] = new Predictive(); } var nextPredic = edges[edgeIndex]; nextPredic.Add(word, pos + 1); }
public Predictive FindMostPopulatedNode() { Stack <Predictive> stk = new Stack <Predictive>(); stk.Push(this); Predictive biggest = null; while (stk.Any()) { var node = stk.Pop(); biggest = biggest == null ? node : (node.words.Count > biggest.words.Count ? node : biggest); foreach (var next in node.edges.Where(e => e != null)) { stk.Push(next); } } return(biggest); }