Exemplo n.º 1
0
        public static Node Parse(string tree)
        {
            var parser = new BinaryTreeParser();

            foreach (char ch in tree)
            {
                switch (ch)
                {
                case '(':
                    parser.StartNode();
                    break;

                case ')':
                    parser.EndNode();
                    break;

                case '/':
                    parser.AddLeft();
                    break;

                case '\\':
                    parser.AddRight();
                    break;

                default:
                    if (char.IsLetterOrDigit(ch))
                    {
                        parser.m_ValueBuffer.Append(ch);
                    }
                    break;
                }
            }
            return(parser.m_Root);
        }
 public static Node Parse(string tree)
 {
     var parser = new BinaryTreeParser();
     foreach (char ch in tree)
     {
         switch (ch)
         {
             case '(':
                 parser.StartNode();
                 break;
             case ')':
                 parser.EndNode();
                 break;
             case '/':
                 parser.AddLeft();
                 break;
             case '\\':
                 parser.AddRight();
                 break;
             default:
                 if (char.IsLetterOrDigit(ch))
                 {
                     parser.m_ValueBuffer.Append(ch);
                 }
                 break;
         }
     }
     return parser.m_Root;
 }
        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());
        }
        public void DepthFirstTree_Iterator_Using_IEnumerable_Test()
        {
            const string treeStr = @"          (ROOT)          " +
                                   "          /    \\         " +
                                   "        (A)    (B)        " +
                                   "        / \\     /        " +
                                   "      (C) (D)  (E)        ";

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

            var root = BinaryTreeParser.Parse(treeStr);
            var tree = new DepthFirstTree(root);

            string actual =
                tree
                .Select(node => node.Value)
                .Aggregate(string.Empty, (current, nodeValue) => current + nodeValue + ";");

            Assert.AreEqual(expected, actual);
        }