diff --git a/DSA/Data Structures/BinarySearchTree.cs b/DSA/Data Structures/BinarySearchTree.cs index 4e2e091..e24eaeb 100644 --- a/DSA/Data Structures/BinarySearchTree.cs +++ b/DSA/Data Structures/BinarySearchTree.cs @@ -16,7 +16,7 @@ namespace DSA public class BSTNode(T Value) : IBinaryNode { public T Value { get; set; } = Value; - public uint Count { get; set; } = 1; + public int Count { get; set; } = 1; public BSTNode? Left { get; set; } public BSTNode? Right { get; set; } diff --git a/DSATests/BinarySearchTreeTests.cs b/DSATests/BinarySearchTreeTests.cs index 336e654..7645769 100644 --- a/DSATests/BinarySearchTreeTests.cs +++ b/DSATests/BinarySearchTreeTests.cs @@ -65,6 +65,7 @@ public void RemoveTest() Assert.AreEqual(10, tree.Count); Assert.IsNotNull(tree.BSTRoot); Assert.AreEqual(11, tree.BSTRoot.Value); + Assert.IsFalse(tree.Contains(10)); int[] ints = new int[tree.Count]; int[] correctInts = [3, 4, 5, 6, 7, 8, 9, 11, 12, 13]; @@ -82,6 +83,7 @@ public void RemoveTest() Assert.AreEqual(9, tree.Count); Assert.IsNotNull(tree.BSTRoot); Assert.AreEqual(11, tree.BSTRoot.Value); + Assert.IsFalse(tree.Contains(3)); ints = new int[tree.Count]; correctInts = [4, 5, 6, 7, 8, 9, 11, 12, 13]; @@ -99,6 +101,7 @@ public void RemoveTest() Assert.AreEqual(8, tree.Count); Assert.IsNotNull(tree.BSTRoot); Assert.AreEqual(11, tree.BSTRoot.Value); + Assert.IsFalse(tree.Contains(13)); ints = new int[tree.Count]; correctInts = [4, 5, 6, 7, 8, 9, 11, 12]; @@ -118,6 +121,9 @@ public void RemoveTest() Assert.AreEqual(5, tree.Count); Assert.IsNotNull(tree.BSTRoot); Assert.AreEqual(11, tree.BSTRoot.Value); + Assert.IsFalse(tree.Contains(6)); + Assert.IsFalse(tree.Contains(8)); + Assert.IsFalse(tree.Contains(4)); ints = new int[tree.Count]; correctInts = [5, 7, 9, 11, 12, 13]; @@ -130,6 +136,46 @@ public void RemoveTest() Assert.AreEqual(correctInts[i], ints[i]); } + [TestMethod()] + public void DuplicateTest() + { + // Create usual test tree but with some duplicates (10x3, 8x2, 3x3) + tree = [10, 10, 10, 6, 12, 4, 8, 8, 11, 13, 3, 5, 3, 7, 3, 9]; + Assert.AreEqual(16, tree.Count); + Assert.IsNotNull(tree.BSTRoot); + Assert.AreEqual(10, tree.BSTRoot.Value); + Assert.AreEqual(3, tree.BSTRoot.Count); + + // Remove first copy of root + tree.Remove(10); + Assert.AreEqual(15, tree.Count); + Assert.IsNotNull(tree.BSTRoot); + Assert.AreEqual(10, tree.BSTRoot.Value); + Assert.AreEqual(2, tree.BSTRoot.Count); + Assert.IsTrue(tree.Contains(10)); + + // Remove root entirely + tree.Remove(10); + tree.Remove(10); + Assert.AreEqual(13, tree.Count); + Assert.IsNotNull(tree.BSTRoot); + Assert.AreEqual(11, tree.BSTRoot.Value); + Assert.AreEqual(1, tree.BSTRoot.Count); + Assert.IsFalse(tree.Contains(10)); + + // Make sure other duplicates are valid + Assert.IsTrue(tree.Contains(8)); + Assert.IsTrue(tree.Contains(3)); + + var node = tree.Find(8); + Assert.IsNotNull(node); + Assert.AreEqual(2, node.Count); + + node = tree.Find(3); + Assert.IsNotNull(node); + Assert.AreEqual(3, node.Count); + } + [TestMethod()] public void ClearTest() {