public static void Iterator()
        {
            var root =
                new Node
                    {
                        Value = "ROOT",

                        Left =
                            new Node
                                {
                                    Value = "LEFT"
                                },

                        Right =
                            new Node
                                {
                                    Value = "RIGHT"
                                }
                    };

            var tree = new BreadthFirstTree(root);

            var traversal = new StringBuilder();
            using (IEnumerator<Node> iterator = tree.GetEnumerator())
            {
                while (iterator.MoveNext())
                {
                    string currentValue = iterator.Current.Value;
                    traversal.Append(currentValue);
                    traversal.Append(";");
                }
            }
            Console.WriteLine(traversal.ToString());
        }
        public void BreadthFirstTree_Iterator_Using_IEnumerator_Test()
        {
            const string treeStr = @"          (ROOT)          " +
                                   "          /    \\         " +
                                   "        (A)    (B)        " +
                                   "        / \\     /        " +
                                   "      (C) (D)  (E)        ";

            const string expected = "ROOT;B;A;E;D;C;";

            var rootNode = BinaryTreeParser.Parse(treeStr);
            var tree = new BreadthFirstTree(rootNode);

            var actual = new StringBuilder();
            using (var iterator = tree.GetEnumerator())
            {
                while (iterator.MoveNext())
                {
                    var currentValue = iterator.Current.Value;
                    actual.Append(currentValue);
                    actual.Append(";");
                }
            }
            Assert.AreEqual(expected, actual.ToString());
        }