/// <summary> /// Find a forced win, if available. A forced win occurs from a /// particular node when the all of the Children of a child node are either /// terminals or forced wins. /// </summary> /// <param name="node"> The node from which to find a forced win. </param> public virtual LetterNode ForcedWin(LetterNode node) { LetterNode winningChild = null; foreach (LetterNode child in node.Children().Values) { if (!child.LeafNode) { winningChild = child; foreach (LetterNode grandChild in child.Children().Values) { if (!(grandChild.LeafNode || (ForcedWin(grandChild) != null))) { winningChild = null; break; } } } if (winningChild != null) { break; } } return(winningChild); }
/// <summary> /// Find the longest word reachable from the specified node. /// </summary> /// <param name="node"> The node from which to find the longest word. </param> public virtual LetterNode LongestWord(LetterNode node) { LetterNode longestChild = null; foreach (LetterNode child in node.Children().Values) { if ((longestChild == null) || (child.MaxLength() > longestChild.MaxLength())) { longestChild = child; } } return(longestChild); }