public void BST_Test() { //insert test var tree = new BST <int>(); Assert.AreEqual(tree.getHeight(), -1); tree.Insert(11); Assert.AreEqual(tree.getHeight(), 0); tree.Insert(6); Assert.AreEqual(tree.getHeight(), 1); tree.Insert(8); Assert.AreEqual(tree.getHeight(), 2); tree.Insert(19); Assert.AreEqual(tree.getHeight(), 2); tree.Insert(4); Assert.AreEqual(tree.getHeight(), 2); tree.Insert(10); Assert.AreEqual(tree.getHeight(), 3); tree.Insert(5); Assert.AreEqual(tree.getHeight(), 3); tree.Insert(17); Assert.AreEqual(tree.getHeight(), 3); tree.Insert(43); Assert.AreEqual(tree.getHeight(), 3); tree.Insert(49); Assert.AreEqual(tree.getHeight(), 3); tree.Insert(31); Assert.AreEqual(tree.getHeight(), 3); Assert.IsTrue(BinarySearchTreeTester <int> .VerifyIsBinarySearchTree(tree.Root, int.MinValue, int.MaxValue)); //delete tree.Delete(43); tree.Delete(11); tree.Delete(6); tree.Delete(8); tree.Delete(19); tree.Delete(4); tree.Delete(10); tree.Delete(5); tree.Delete(17); tree.Delete(49); tree.Delete(31); Assert.AreEqual(tree.getHeight(), -1); Assert.AreEqual(tree.Count, 0); tree.Insert(31); }
public void AVLTree_AccuracyTest() { var nodeCount = 1000; var rnd = new Random(); var randomNumbers = Enumerable.Range(1, nodeCount) .OrderBy(x => rnd.Next()) .ToList(); var tree = new AVLTree <int>(true); for (int i = 0; i < nodeCount; i++) { tree.Insert(randomNumbers[i]); Assert.IsTrue(tree.HasItem(randomNumbers[i])); Assert.IsTrue(BinarySearchTreeTester <int> .VerifyIsBinarySearchTree(tree.Root, int.MinValue, int.MaxValue)); var actualHeight = tree.GetHeight(); //http://stackoverflow.com/questions/30769383/finding-the-minimum-and-maximum-height-in-a-avl-tree-given-a-number-of-nodes var maxHeight = 1.44 * Math.Log(nodeCount + 2, 2) - 0.328; Assert.IsTrue(actualHeight < maxHeight); Assert.IsTrue(tree.Count == i + 1); } randomNumbers = Enumerable.Range(1, nodeCount) .OrderBy(x => rnd.Next()) .ToList(); //IEnumerable test using linq Assert.AreEqual(tree.Count, tree.Count()); for (int i = 0; i < nodeCount; i++) { tree.Delete(randomNumbers[i]); Assert.IsTrue(BinarySearchTreeTester <int> .VerifyIsBinarySearchTree(tree.Root, int.MinValue, int.MaxValue)); var actualHeight = tree.GetHeight(); //http://stackoverflow.com/questions/30769383/finding-the-minimum-and-maximum-height-in-a-avl-tree-given-a-number-of-nodes var maxHeight = 1.44 * Math.Log(nodeCount + 2, 2) - 0.328; Assert.IsTrue(actualHeight < maxHeight); } Assert.IsTrue(tree.Count == 0); }
public void RedBlackTree_AccuracyTest() { var nodeCount = 1000; var rnd = new Random(); var randomNumbers = Enumerable.Range(1, nodeCount) .OrderBy(x => rnd.Next()) .ToList(); var tree = new RedBlackTree <int>(); for (int i = 0; i < nodeCount; i++) { tree.Insert(randomNumbers[i]); Assert.IsTrue(tree.HasItem(randomNumbers[i])); Assert.IsTrue(BinarySearchTreeTester <int> .VerifyIsBinarySearchTree(tree.Root, int.MinValue, int.MaxValue)); var actualHeight = tree.GetHeight(); //http://doctrina.org/maximum-height-of-red-black-tree.html var maxHeight = 2 * Math.Log(nodeCount + 1, 2); Assert.IsTrue(actualHeight < maxHeight); Assert.IsTrue(tree.Count == i + 1); } //shuffle again before deletion tests randomNumbers = Enumerable.Range(1, nodeCount) .OrderBy(x => rnd.Next()) .ToList(); //IEnumerable test using linq Assert.AreEqual(tree.Count, tree.Count()); for (int i = 0; i < nodeCount; i++) { tree.Delete(randomNumbers[i]); Assert.IsTrue(BinarySearchTreeTester <int> .VerifyIsBinarySearchTree(tree.Root, int.MinValue, int.MaxValue)); var actualHeight = tree.GetHeight(); //http://doctrina.org/maximum-height-of-red-black-tree.html var maxHeight = 2 * Math.Log(nodeCount + 1, 2); Assert.IsTrue(actualHeight < maxHeight); Assert.IsTrue(tree.Count == nodeCount - 1 - i); } Assert.IsTrue(tree.Count == 0); }