public void TestBSTRemove() { var tree = new BinarySearchTree<int>() { 40, 11, 62, 43, 34, 16, 10, 63 }; Assert.IsTrue(tree.Contains(43), "\nChecking if 43 is there."); Assert.IsTrue(tree.Remove(43), "\nRemoving 43."); Assert.IsFalse(tree.Contains(43), "\nChecking if 43 is still there."); }
public static void Main(string[] args) { Console.OutputEncoding = Encoding.UTF8; BinarySearchTree <int> tree = new BinarySearchTree <int>(); tree.Root = new BinaryTreeNode <int>() { Data = 100 }; tree.Root.Left = new BinaryTreeNode <int>() { Data = 50, Parent = tree.Root }; tree.Root.Right = new BinaryTreeNode <int>() { Data = 150, Parent = tree.Root }; tree.Count = 3; VisualizeTree(tree, "The BST with three nodes (50, 100, 150):"); tree.Add(75); tree.Add(125); VisualizeTree(tree, "The BST after adding two nodes (75, 125):"); tree.Add(25); tree.Add(175); tree.Add(90); tree.Add(110); tree.Add(135); VisualizeTree(tree, "The BST after adding five nodes (25, 175, 90, 110, 135):"); tree.Remove(25); VisualizeTree(tree, "The BST after removing the node 25:"); tree.Remove(50); VisualizeTree(tree, "The BST after removing the node 50:"); tree.Remove(100); VisualizeTree(tree, "The BST after removing the node 100:"); Console.Write("Pre-order traversal:\t"); Console.Write(string.Join(", ", tree.Traverse(TraversalEnum.PREORDER).Select(n => n.Data))); Console.Write("\nIn-order traversal:\t"); Console.Write(string.Join(", ", tree.Traverse(TraversalEnum.INORDER).Select(n => n.Data))); Console.Write("\nPost-order traversal:\t"); Console.Write(string.Join(", ", tree.Traverse(TraversalEnum.POSTORDER).Select(n => n.Data))); tree.Remove(90); VisualizeTree(tree, "---"); tree.Remove(75); VisualizeTree(tree, "---"); tree.Remove(125); VisualizeTree(tree, "---"); tree.Remove(110); VisualizeTree(tree, "---"); tree.Remove(175); VisualizeTree(tree, "---"); tree.Remove(135); VisualizeTree(tree, "---"); tree.Remove(150); VisualizeTree(tree, "---"); Console.ReadLine(); }
public void TestRemove() { BinarySearchTree<int> tree = new BinarySearchTree<int>(); //fails to remove item from empty list. Assert.IsFalse(tree.Remove(10)); tree.Add(10); tree.Add(12); Assert.IsTrue(tree.Remove(10)); Assert.IsFalse(tree.Contains(10)); Assert.IsFalse(tree.Remove(10)); }
public void testMassAddRemove() { BinarySearchTree<int> tree = new BinarySearchTree<int>(); List<int> list = new List<int>(); Random r = new Random(); int numberToAdd = r.Next(1000000); for (int i = 0; i < 1000; i++) { while (list.Contains(numberToAdd)) { numberToAdd = r.Next(1000000); } list.Add(numberToAdd); tree.Add(numberToAdd); } Assert.IsTrue(list.Count == tree.Count && list.Count == 1000); list.Sort(); Assert.IsTrue(Enumerable.SequenceEqual(list, tree)); int curr; for (int i = 0; i < list.Count; i++) { curr = list.ElementAt(0); Assert.IsTrue(list.Remove(curr)); Assert.IsTrue(tree.Remove(curr)); } Assert.IsTrue(Enumerable.SequenceEqual(list, tree)); numberToAdd = r.Next(1000000); for (int i = 0; i < 1000; i++) { while (list.Contains(numberToAdd)) { numberToAdd = r.Next(1000000); } list.Add(numberToAdd); tree.Add(numberToAdd); if (i % 2 == 0) { curr = list.ElementAt(r.Next(list.Count)); Assert.IsTrue(list.Remove(curr)); Assert.IsTrue(tree.Remove(curr)); } } list.Sort(); Assert.IsTrue(Enumerable.SequenceEqual(list, tree)); }
public void TestIterator() { BinarySearchTree<int> tree = new BinarySearchTree<int>(); //empty tree should give no iterations. foreach (int curr in tree) { Assert.Fail("Should be empty."); } for(int i = 0; i < 100; i++) { tree.Add(i); } int element = 0; foreach(int curr in tree) { Assert.AreEqual(element, curr); element++; } //remove root element, an item with 1 child in the middle and a leaf with no children at bottom. Recheck everything iterates in order. tree.Remove(0); tree.Remove(50); tree.Remove(100); element = 1; foreach (int curr in tree) { Assert.AreEqual(element, curr); if (element == 49) element += 2; else element++; } //re add 50 so that 51 now has child on left of 50 and child right of 52. tree.Add(50); element = 1; foreach (int curr in tree) { Assert.AreEqual(element, curr); element++; } //remove node with 2 children, check iterates correctly still. tree.Remove(51); element = 1; foreach (int curr in tree) { Assert.AreEqual(element, curr); if (element == 50) element += 2; else element++; } }
public void TestCount() { BinarySearchTree<int> tree = new BinarySearchTree<int>(); Assert.IsTrue(tree.Count == 0); tree.Add(10); Assert.IsTrue(tree.Count == 1); for (int i = 100; i < 200; i++) { tree.Add(i); } Assert.IsTrue(tree.Count == 101); tree.Remove(10); Assert.IsTrue(tree.Count == 100); for (int i = 100; i < 200; i++) { tree.Remove(i); } Assert.IsTrue(tree.Count == 0); //count isnt decremented if unsuccessfully try to remove an item. tree.Remove(10); Assert.IsTrue(tree.Count == 0); }