public void RemoveSubtreeDoubleTest()
        {
            var bst = new DSWBalancedBinarySearchTree<double>();

            Assert.IsFalse(bst.RemoveSubtree(0.3));

            bst.Insert(11.7);

            Assert.IsTrue(bst.RemoveSubtree(11.7));
            Assert.IsFalse(bst.RemoveSubtree(11.7));

            bst.Insert(2.7);
            bst.Insert(11.7);
            bst.Insert(16.7);

            var balanced = "{\"Value\":11.7,\"LeftChild\":{\"Value\":2.7,\"LeftChild\":null,\"RightChild\":null}," +
                           "\"RightChild\":{\"Value\":16.7,\"LeftChild\":null,\"RightChild\":null}}";

            Assert.AreEqual(balanced, bst.GetJson());

            Assert.IsTrue(bst.RemoveSubtree(11.7));

            var balanced2 = "null";

            Assert.AreEqual(balanced2, bst.GetJson());
        }
        public void RemoveSubtreeStringTest()
        {
            var bst = new DSWBalancedBinarySearchTree<string>();

            Assert.IsFalse(bst.RemoveSubtree("A"));

            bst.Insert("A");

            Assert.IsTrue(bst.RemoveSubtree("A"));
            Assert.IsFalse(bst.RemoveSubtree("A"));

            bst.Insert("A");
            bst.Insert("B");
            bst.Insert("C");

            var balanced = "{\"Value\":\"B\",\"LeftChild\":{\"Value\":\"A\",\"LeftChild\":null,\"RightChild\":null}," +
                           "\"RightChild\":{\"Value\":\"C\",\"LeftChild\":null,\"RightChild\":null}}";

            Assert.AreEqual(balanced, bst.GetJson());

            Assert.IsTrue(bst.RemoveSubtree("B"));

            var balanced2 = "null";

            Assert.AreEqual(balanced2, bst.GetJson());
        }
        public void RemoveBigTreeDoubleTest()
        {
            var bst = new DSWBalancedBinarySearchTree<double>();

            for (var i = 0; i < 50; i++)
            {
                bst.Insert(i / 2.0);
            }

            Assert.IsTrue(bst.Remove(20.0));
            Assert.IsTrue(bst.Remove(5.0));
            Assert.IsTrue(bst.Remove(24.0));
            Assert.IsFalse(bst.Remove(50.5));
            Assert.IsTrue(bst.RemoveSubtree(23.0));
            Assert.IsFalse(bst.RemoveSubtree(-1.9));
        }
        public void RemoveBigTreeIntTest()
        {
            var bst = new DSWBalancedBinarySearchTree<int>();

            for (var i = 0; i < 50; i++)
            {
                bst.Insert(i);
            }

            Assert.IsTrue(bst.Remove(20));
            Assert.IsTrue(bst.Remove(5));
            Assert.IsTrue(bst.Remove(45));
            Assert.IsFalse(bst.Remove(50));
            Assert.IsTrue(bst.RemoveSubtree(37));
            Assert.IsFalse(bst.RemoveSubtree(-1));
        }
        public void RemoveSubtreeIntTest()
        {
            var bst = new DSWBalancedBinarySearchTree<int>();

            Assert.IsFalse(bst.RemoveSubtree(0));

            bst.Insert(11);

            Assert.IsTrue(bst.RemoveSubtree(11));
            Assert.IsFalse(bst.RemoveSubtree(11));

            for (var i = 0; i < 7; i++)
            {
                bst.Insert(i);
            }

            var balanced = "{\"Value\":3,\"LeftChild\":{\"Value\":1," +
                           "\"LeftChild\":{\"Value\":0,\"LeftChild\":null,\"RightChild\":null}," +
                           "\"RightChild\":{\"Value\":2,\"LeftChild\":null,\"RightChild\":null}}," +
                           "\"RightChild\":{\"Value\":5," +
                           "\"LeftChild\":{\"Value\":4,\"LeftChild\":null,\"RightChild\":null}," +
                           "\"RightChild\":{\"Value\":6,\"LeftChild\":null,\"RightChild\":null}}}";

            Assert.AreEqual(balanced, bst.GetJson());
            Assert.IsTrue(bst.RemoveSubtree(5));

            var balanced2 = "{\"Value\":2,\"LeftChild\":{\"Value\":1," +
                            "\"LeftChild\":{\"Value\":0,\"LeftChild\":null,\"RightChild\":null}," +
                            "\"RightChild\":null}," +
                            "\"RightChild\":{\"Value\":3,\"LeftChild\":null,\"RightChild\":null}}";

            Assert.AreEqual(balanced2, bst.GetJson());
            Assert.IsTrue(bst.RemoveSubtree(2));
            Assert.IsFalse(bst.RemoveSubtree(2));
        }