public void Given_BinarySearchTree_When_DeleteNodeWithTwoChildNodes_Then_NodeShouldBeDeleted(int[] valuesToInsert, int[] expectedValues, int valueToDelete) { //Given var actualValues = new List <int>(); var binarySearchTree = new BinarySearchTreeV1(); foreach (var valueToInsert in valuesToInsert) { binarySearchTree.Insert(valueToInsert); } //When binarySearchTree.Delete(valueToDelete); //Then //In-order traversal var currentNode = binarySearchTree.Root; var stack = new Stack <Node>(); stack.Push(currentNode); while (stack.Count > 0) { if (currentNode.Left != null) { stack.Push(currentNode.Left); currentNode = currentNode.Left; } else { var node = stack.Pop(); actualValues.Add(node.Value); if (node.Right != null) { stack.Push(node.Right); currentNode = node.Right; } } } for (var i = 0; i < expectedValues.Length; i++) { var expectedValue = expectedValues[i]; var actualValue = actualValues[i]; Assert.AreEqual(expectedValue, actualValue); } }
public void Given_BinarySearchTree_When_InsertValues_Then_ValuesShouldBeInsertedIntoBinarySearchTree(int[] valuesToInsert, int[] expectedValues) { //Given var binarySearchTree = new BinarySearchTreeV1(); var actualValues = new List <int>(); //When foreach (var value in valuesToInsert) { binarySearchTree.Insert(value); } //Then //In-order traversal var stack = new Stack <Node>(); var currentNode = binarySearchTree.Root; stack.Push(currentNode); while (stack.Count > 0) { if (currentNode.Left != null) { currentNode = currentNode.Left; stack.Push(currentNode); } else { var node = stack.Pop(); actualValues.Add(node.Value); if (node.Right != null) { currentNode = node.Right; stack.Push(currentNode); } } } for (var i = 0; i < expectedValues.Length; i++) { Assert.AreEqual(expectedValues[i], actualValues[i]); } }