public void TestAdd()
        {
            RecursiveBinarySearchTree<int> tree = new RecursiveBinarySearchTree<int>();

            TreeNode<int> node1 = new TreeNode<int>(1);
            TreeNode<int> node2 = new TreeNode<int>(2);
            TreeNode<int> node3 = new TreeNode<int>(3);
            TreeNode<int> node4 = new TreeNode<int>(4);

            tree.Add(node4.Value);
            tree.Add(node2.Value);
            tree.Add(node3.Value);
            tree.Add(node1.Value);

            TreeNode<int> node5 = new TreeNode<int>(5);
            TreeNode<int> node6 = new TreeNode<int>(6);
            TreeNode<int> node7 = new TreeNode<int>(7);
            TreeNode<int> node8 = new TreeNode<int>(8);

            tree.Add(node6.Value);
            tree.Add(node5.Value);
            tree.Add(node8.Value);
            tree.Add(node7.Value);

            TreeNode<int> testNode = tree.FindNode(node2.Value);

            Assert.IsNotNull(testNode, "Couldn't find test node");
            Assert.AreEqual(testNode.Value.CompareTo(node2.Value), 0, "Test node does not match value");
            Assert.IsNotNull(testNode.LeftNode, "LeftNode is null");
            Assert.IsNotNull(testNode.RightNode, "Right node is null");
           
            TreeNode<int> leftNode = testNode.LeftNode;
            TreeNode<int> rightNode = testNode.RightNode;

            Assert.AreEqual(leftNode.Value.CompareTo(node1.Value), 0, "left node does not match expected value");
            Assert.AreEqual(rightNode.Value.CompareTo(node3.Value), 0, "right node does not match expected value");

            Assert.AreEqual(leftNode.ParentNode.Value.CompareTo(node2.Value), 0);
            Assert.AreEqual(rightNode.ParentNode.Value.CompareTo(node2.Value), 0);

            testNode = tree.FindNode(node6.Value);

            Assert.IsNotNull(testNode, "Couldn't find test node");
            Assert.AreEqual(testNode.Value.CompareTo(node6.Value), 0, "Test node does not match value");
            Assert.IsNotNull(testNode.LeftNode, "LeftNode is null");
            Assert.IsNotNull(testNode.RightNode, "Right node is null");

            leftNode = testNode.LeftNode;
            rightNode = testNode.RightNode;

            Assert.AreEqual(leftNode.Value.CompareTo(node5.Value), 0, "left node does not match expected value");
            Assert.AreEqual(rightNode.Value.CompareTo(node8.Value), 0, "right node does not match expected value");

            Assert.AreEqual(leftNode.ParentNode.Value.CompareTo(node6.Value), 0);
            Assert.AreEqual(rightNode.ParentNode.Value.CompareTo(node6.Value), 0);
        }
        public IEnumerable <int> CreateTreeFromCollectionTest(List <int> items)
        {
            RecursiveBinarySearchTree <int> tree = new RecursiveBinarySearchTree <int>(items);
            List <int> result = new List <int>();

            foreach (var data in tree)
            {
                result.Add(data);
            }

            return(result);
        }
        public IEnumerable <int> AddTest(List <int> items, int item)
        {
            RecursiveBinarySearchTree <int> tree = new RecursiveBinarySearchTree <int>(items);

            tree.Add(item);

            List <int> result = new List <int>();

            foreach (var data in tree)
            {
                result.Add(data);
            }

            return(result);
        }
        public int TestGetMin(List <int> items, IComparer <int> comparator)
        {
            RecursiveBinarySearchTree <int> tree = new RecursiveBinarySearchTree <int>(items, comparator);

            return(tree.GetMin(tree.Root).Data);
        }
        private RecursiveBinarySearchTree<int> ConstructTree()
        {
            RecursiveBinarySearchTree<int> tree = new RecursiveBinarySearchTree<int>();

            TreeNode<int> node1 = new TreeNode<int>(1);
            TreeNode<int> node2 = new TreeNode<int>(2);
            TreeNode<int> node3 = new TreeNode<int>(3);
            TreeNode<int> node4 = new TreeNode<int>(4);

            tree.Add(node4.Value);
            tree.Add(node2.Value);
            tree.Add(node3.Value);
            tree.Add(node1.Value);

            TreeNode<int> node5 = new TreeNode<int>(5);
            TreeNode<int> node6 = new TreeNode<int>(6);
            TreeNode<int> node7 = new TreeNode<int>(7);
            TreeNode<int> node8 = new TreeNode<int>(8);

            tree.Add(node6.Value);
            tree.Add(node5.Value);
            tree.Add(node8.Value);
            tree.Add(node7.Value);

            return tree;
        }
        public Student TestGetLeft(List <Student> items, IComparer <Student> comparator)
        {
            RecursiveBinarySearchTree <Student> tree = new RecursiveBinarySearchTree <Student>(items, comparator);

            return(tree.GetLeft().Data);
        }