예제 #1
0
        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);
        }
예제 #2
0
        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();
            }
        }