コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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]);
            }
        }