public void GivenZillowExampleWhenInsertExpectMatchExample() { // arrange var tree = new TrinaryTree(5); // adding nodes to the tree in this order 5,4,9,5,7,2,2 // results in a tree that looks like this: // 5 // / | \ // 4 5 9 // / / // 2 7 // | // 2 // act foreach (int value in this.valuesToAdd) { tree.Insert(value); } // assert Assert.Equal(5, tree.RootNode.Data); Assert.Equal(4, tree.RootNode.Left.Data); Assert.Equal(2, tree.RootNode.Left.Left.Data); Assert.Equal(2, tree.RootNode.Left.Left.Middle.Data); Assert.Equal(5, tree.RootNode.Middle.Data); Assert.Equal(9, tree.RootNode.Right.Data); Assert.Equal(7, tree.RootNode.Right.Left.Data); }
public void GivenZillowExampleWhenDeleteRootExpectMiddleReplacement() { // arrange // 5 // / | \ // 4 5 9 // / / // 2 7 // | // 2 TrinaryTree startTree = this.GetBasicTree(); // create expected tree // 5 // / \ // 4 9 // / / // 2 7 // | // 2 var expectedTree = new TrinaryTree(5); expectedTree.RootNode.Left = new TrinaryTree.TrinaryTreeNode(4); expectedTree.RootNode.Left.Left = new TrinaryTree.TrinaryTreeNode(2); expectedTree.RootNode.Left.Left.Middle = new TrinaryTree.TrinaryTreeNode(2); expectedTree.RootNode.Right = new TrinaryTree.TrinaryTreeNode(9); expectedTree.RootNode.Right.Left = new TrinaryTree.TrinaryTreeNode(7); // act expectedTree.Delete(5); // assert }
public void GivenRightOnlyChildrenWhenDeleteExpectMinFromRightSubtreeAsReplacement2() { // arrange // create start tree // 5 // \ // 7 <-- to remove // \ // 12 // / | \ // replacement --> 9 12 14 // \ // 10 var startTree = new TrinaryTree(5); startTree.RootNode.Right = new TrinaryTree.TrinaryTreeNode(7); startTree.RootNode.Right.Right = new TrinaryTree.TrinaryTreeNode(12); startTree.RootNode.Right.Right.Left = new TrinaryTree.TrinaryTreeNode(9); startTree.RootNode.Right.Right.Left.Right = new TrinaryTree.TrinaryTreeNode(10); startTree.RootNode.Right.Right.Middle = new TrinaryTree.TrinaryTreeNode(12); startTree.RootNode.Right.Right.Right = new TrinaryTree.TrinaryTreeNode(14); // act startTree.Delete(7); // expected tree // 5 // \ // 12 // / | \ // 9 12 14 // \ // 10 // assert Assert.Equal(5, startTree.RootNode.Data); startTree.RootNode.AssertLeftIsNull().AssertMiddleIsNull(); Assert.Equal(12, startTree.RootNode.Right.Data); Assert.Equal(14, startTree.RootNode.Right.Right.Data); AssertNoChildren(startTree.RootNode.Right.Right); Assert.Equal(12, startTree.RootNode.Right.Middle.Data); AssertNoChildren(startTree.RootNode.Right.Middle); Assert.Equal(9, startTree.RootNode.Right.Left.Data); startTree.RootNode.Right.Left.AssertLeftIsNull().AssertMiddleIsNull(); Assert.Equal(10, startTree.RootNode.Right.Left.Right.Data); AssertNoChildren(startTree.RootNode.Right.Left.Right); }
/// <summary> /// The get basic tree. /// </summary> /// <returns> /// The <see cref="TrinaryTree"/>. /// </returns> private TrinaryTree GetBasicTree() { var tree = new TrinaryTree(5); tree.RootNode.Left = new TrinaryTree.TrinaryTreeNode(4); tree.RootNode.Left.Left = new TrinaryTree.TrinaryTreeNode(2); tree.RootNode.Left.Left.Middle = new TrinaryTree.TrinaryTreeNode(2); tree.RootNode.Middle = new TrinaryTree.TrinaryTreeNode(5); tree.RootNode.Right = new TrinaryTree.TrinaryTreeNode(9); tree.RootNode.Right.Left = new TrinaryTree.TrinaryTreeNode(7); return(tree); }
public void GivenEmptyTreeWhenDeleteExpectNoChange() { // arrange var fixture = new Fixture(); var nonExistantValue = fixture.Create <int>(); var tree = new TrinaryTree(); // act tree.Delete(nonExistantValue); // assert tree.RootNode.Should().BeNull(); }
public void GivenNodeInRightSpotWhenIsRightExpectTrue() { // arrange var tree = new TrinaryTree(1); tree.RootNode.Right = new TrinaryTree.TrinaryTreeNode(2); // act bool actual = tree.RootNode.Right.IsRight(tree.RootNode); // assert Assert.True(actual); Assert.False(tree.RootNode.Right.IsLeft(tree.RootNode)); Assert.False(tree.RootNode.Right.IsMiddle(tree.RootNode)); }
public void GivenIdenticalNumbersWhenDeleteExpectLastOneRemoved() { // arrange var fixture = new Fixture(); var valueToAdd = fixture.Create <int>(); var tree = new TrinaryTree(valueToAdd); tree.RootNode.Middle = new TrinaryTree.TrinaryTreeNode(valueToAdd); tree.RootNode.Middle.Middle = new TrinaryTree.TrinaryTreeNode(valueToAdd); // act tree.Delete(valueToAdd); // assert tree.RootNode.Data.Should().Be(valueToAdd); tree.RootNode.AssertLeftIsNull().AssertRightIsNull(); tree.RootNode.Middle.Data.Should().Be(valueToAdd); AssertNoChildren(tree.RootNode.Middle); }
public void GivenLeftOnlyChildrenWhenDeleteExpectLeftReassignedToParent() { // arrange // 5 // / | \ // 4 5 9 // / / // 2 7 // | // 2 TrinaryTree startTree = this.GetBasicTree(); // create expected tree // 5 // / | \ // 2 5 9 // | / // 2 7 var expectedTree = new TrinaryTree(5); expectedTree.RootNode.Left = new TrinaryTree.TrinaryTreeNode(4); expectedTree.RootNode.Left.Left = new TrinaryTree.TrinaryTreeNode(2); expectedTree.RootNode.Left.Left.Middle = new TrinaryTree.TrinaryTreeNode(2); expectedTree.RootNode.Middle = new TrinaryTree.TrinaryTreeNode(5); expectedTree.RootNode.Right = new TrinaryTree.TrinaryTreeNode(9); expectedTree.RootNode.Right.Left = new TrinaryTree.TrinaryTreeNode(7); // act startTree.Delete(4); // assert Assert.Equal(5, startTree.RootNode.Data); Assert.Equal(2, startTree.RootNode.Left.Data); Assert.Equal(2, startTree.RootNode.Left.Middle.Data); Assert.Equal(5, startTree.RootNode.Middle.Data); Assert.Equal(9, startTree.RootNode.Right.Data); Assert.Equal(7, startTree.RootNode.Right.Left.Data); }
public void GivenIdenticalNumbersWhenInsertExpectAllPutInMiddle() { // arrange var fixture = new Fixture(); var valueToAdd = fixture.Create <int>(); var dups = new[] { valueToAdd, valueToAdd, valueToAdd }; var tree = new TrinaryTree(); // act foreach (int value in dups) { tree.Insert(value); } // assert tree.RootNode.Data.Should().Be(dups[0]); tree.RootNode.AssertLeftIsNull().AssertRightIsNull(); tree.RootNode.Middle.Data.Should().Be(dups[0]); tree.RootNode.Middle.AssertLeftIsNull().AssertRightIsNull(); tree.RootNode.Middle.Middle.Data.Should().Be(dups[0]); AssertNoChildren(tree.RootNode.Middle.Middle); }