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); }
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>())); }