public void RemoveValueThatDoesNotExist()
        {
            var tree = new BinarySearchTree<int> {10, 7, 11, 8};

            Assert.That(tree.Remove(13), Is.False);
            Assert.That(tree, Is.EqualTo(new[] { 7, 8, 10, 11 }));
        }
        public void RemoveRootNode()
        {
            var tree = new BinarySearchTree<int> {10};
            tree.Remove(10);

            Assert.That(tree, Is.EqualTo(new int[0]));
        }
        public void RemoveValueFromEmptyTree()
        {
            var tree = new BinarySearchTree<int>();

            Assert.That(tree.Remove(10), Is.False);
            Assert.That(tree, Is.EqualTo(new int[0]));
        }
        public void RemoveNodeWithNoChildren()
        {
            var tree = new BinarySearchTree<int> {10, 7, 8, 6};

            Assert.That(tree.Remove(8), Is.True);
            Assert.That(tree.Remove(6), Is.True);
            Assert.That(tree, Is.EqualTo(new[] { 7, 10 }));
        }