public void Remove_TheRootFromATwoLevelTree_TheCorrectTree()
        {
            var rootNode = SimpleTree.RootElement;
            var bst      = SimpleTree.Create();

            bst.Remove(rootNode.Key);

            NodeAssert.NotNullAndEqual(bst.Root, Node(5));
            NodeAssert.BothChildrenAreNotNull(bst.Root);

            NodeAssert.NotNullAndEqual(bst.Root.Right, SimpleTree.SecondBiggestElement);
            NodeAssert.LeftChildIsNull(bst.Root.Right);

            NodeAssert.NotNullAndEqual(bst.Root.Left, SimpleTree.SecondSmallestElement);
            NodeAssert.BothChildrenAreNotNull(bst.Root.Left);
        }
        public void Remove_TheRightChildWithLeftChild_TheRootWithWithRightChild()
        {
            var firstNode  = 1;
            var secondNode = 3;
            var thirdNode  = 2;

            var bst = new BinarySearchTree <int, int>();

            bst.Insert(Key(firstNode), Value(firstNode));
            bst.Insert(Key(secondNode), Value(secondNode));
            bst.Insert(Key(thirdNode), Value(thirdNode));

            bst.Remove(Key(secondNode));

            NodeAssert.NotNullAndEqual(bst.Root, Node(firstNode));
            NodeAssert.NotNullAndEqual(bst.Root.Right, Node(thirdNode));
            NodeAssert.LeftChildIsNull(bst.Root);
        }