private static TextTree PlantTree(string treeId, TreeSpecification ts, Random r) { var root = new TreeNode { Symbol = ts.Lables[r.Next(0, ts.Lables.Count)] }; root.SetParent(null); Germinate(root, ts.MaxDepth, ts.MaxDegree, ts.Lables, r); var mytree = new TextTree { TreeId = treeId, Root = root }; return(mytree); }
private static void Germinate(ITreeNode root, int maxDepth, int maxDegree, ReadOnlyCollection <NodeSymbol> lables, Random r) { var node = new TreeNode { Symbol = lables[r.Next(0, lables.Count)] }; node.SetParent(root); if (node.Depth == maxDepth - 1) { return; } var degree = Random.Next(0, maxDegree + 1); for (var b = 0; b < degree; b++) { Germinate(node, maxDepth, maxDegree, lables, r); node.Children.Sort(); } }