private static IEnumerable <T> Enumerate <T>(this INormalNode <T> root, List <T> list)
        {
            List <T> items = list;

            if (root.Left != null)
            {
                items.AddRange(root.Left.Enumerate());
            }

            items.Add(root.Data);

            if (root.Right != null)
            {
                items.AddRange(root.Right.Enumerate());
            }

            return(items);
        }
예제 #2
0
        static void Main()
        {
            var rnd  = new Random();
            var max  = 100;
            var root = ImmutableBinaryTree.Create(max / 2);

            Enumerable.Range(0, 100).Select(n => rnd.Next(max))
            .ForEach(n => root = root.Add(n));

            root.Enumerate().ForEach(n => Console.WriteLine(n));
            //var root = ImmutableBinaryTree.Create<int>(0);
            //var t = root.CreateLeft(1)
            //            .CreateLeft(2)
            //            .CreateLeft(3)
            //            .GoUp()
            //            .CreateRight(4)
            //            .GoUp()
            //            .GoUp()
            //            .CreateRight(5)
            //            .CreateRight(6)
            //            .GoUp()
            //            .CreateLeft(7)
            //            .GoUp()
            //            .GoUp()
            //            .GoUp()
            //            .CreateRight(8)
            //            .CreateLeft(9)
            //            .GoUp()
            //            .CreateRight(10)
            //            .GoUp()
            //            .GoUp();

            INormalNode <int> r2 = root;
            var s = r2.CollectTree(n => new[] { n.Left, n.Right }.Where(x => x != null), n => n.Data.ToString());

            Console.WriteLine(s);
        }
 public static IEnumerable <T> Enumerate <T>(this INormalNode <T> root)
 {
     return(root.Enumerate(new List <T>()));
 }