示例#1
0
        public void TestPostTraversal(List <int> expected, SungBinaryTreeNode <int> root)
        {
            var sut    = new SungBinaryTreeTraverser();
            var actual = sut.TraversePost(root).ToList();

            Assert.True(expected.SequenceEqual(actual));
        }
示例#2
0
        public void TestBuildingTree(SungBinaryTreeNode <int> expected, int[] input)
        {
            var actual = new SungBinaryTreeBuilder().Build(input);

            var traverser    = new SungBinaryTreeTraverser();
            var expectedList = traverser.TraversePost(expected);
            var actualList   = traverser.TraversePost(actual);

            Assert.True(expectedList.SequenceEqual(actualList));
        }
示例#3
0
        private SungBinaryTreeNode <int> Build(int[] a, int min, int max)
        {
            if (min > max)
            {
                return(null);
            }

            var mid  = (min + max) / 2;
            var node = new SungBinaryTreeNode <int>(a[mid]);

            node.Left  = Build(a, min, mid - 1);
            node.Right = Build(a, mid + 1, max);

            return(node);
        }
示例#4
0
        public IEnumerable <int> TraversePost(SungBinaryTreeNode <int> root)
        {
            if (root == null)
            {
                yield break;
            }

            foreach (var value in TraversePost(root.Left))
            {
                yield return(value);
            }
            foreach (var value in TraversePost(root.Right))
            {
                yield return(value);
            }
            yield return(root.Value);
        }
示例#5
0
 public SungBinaryTreeNode <T> AddRight(T value)
 {
     Right = new SungBinaryTreeNode <T>(value);
     return(this);
 }
示例#6
0
 public SungBinaryTreeNode <T> AddLeft(T value)
 {
     Left = new SungBinaryTreeNode <T>(value);
     return(this);
 }