Skip to content

Commit

Permalink
Merge pull request ehilst515#27 from ehilst515/breadth-first
Browse files Browse the repository at this point in the history
breadth first traversal complete
  • Loading branch information
ehilst515 authored Sep 15, 2020
2 parents 34df356 + bddd188 commit 2d013f7
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 1 deletion.
74 changes: 73 additions & 1 deletion DataStructures.Tests/TreeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ public void Add_can_add_single_Left_and_Right_nodes()
tree.Add(2);
tree.Add(7);

// ___6___
// / \
// 2 7

//Assert
Assert.Equal(6, tree.Root.Value);
Assert.Equal(2, tree.Root.Left.Value);
Expand All @@ -54,6 +58,13 @@ public void Contains_can_find_Node_value()
tree.Add(10);
tree.Add(1);

// ___6___
// / \
// 2 7
// / \ \
//1 3 10


// Act
bool trueResult = tree.Contains(tree.Root, 10);
bool falseResult = tree.Contains(tree.Root, 11);
Expand All @@ -75,6 +86,12 @@ public void PreOrder_returns_values_as_strings()
tree.Add(10);
tree.Add(1);

// ___6___
// / \
// 2 7
// / \ \
//1 3 10

StringBuilder sb = new StringBuilder();

// Act
Expand All @@ -98,6 +115,14 @@ public void InOrder_returns_values_as_strings()
tree.Add(9);
tree.Add(20);

// ___6___
// / \
// 2 7
// / \ / \
//1 3 9 10
// \
// 20


StringBuilder sb = new StringBuilder();
sb.Append(" ");
Expand All @@ -123,6 +148,14 @@ public void PostOrder_returns_values_as_strings()
tree.Add(9);
tree.Add(20);

// ___6___
// / \
// 2 7
// / \ / \
//1 3 9 10
// \
// 20


StringBuilder sb = new StringBuilder();
sb.Append(" ");
Expand All @@ -148,14 +181,53 @@ public void FindFindMaxValue_returns_max_int()
tree.Add(9);
tree.Add(20);

// ___6___
// / \
// 2 7
// / \ / \
//1 3 9 10
// \
// 20

// Act
int result = tree.FindMaxValue(tree.Root);

// Assert
Assert.Equal(20, result);

}

[Fact]
public void Breadth_First_returns_tree_value_in_level_order()
{
// Arrange
BinaryTree tree = new BinaryTree();
tree.Add(6);
tree.Add(2);
tree.Add(7);
tree.Add(3);
tree.Add(10);
tree.Add(1);
tree.Add(9);
tree.Add(20);

// ___6___
// / \
// 2 7
// / \ \
//1 3 10
// / \
// 9 20

//Breadth_First list: 6, 2, 7, 1, 3, 10, 9, 20

// Act
IEnumerable<int> result = tree.Breadth_First();

// Assert
int[] expected = new int[] { 6, 2, 7, 1, 3, 10, 9, 20 };
Assert.Equal(expected, result);

}

}
}
28 changes: 28 additions & 0 deletions DataStructures/Trees/BinaryTree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,33 @@ public int FindMaxValue(Node current)

return result;
}

public IEnumerable<int> Breadth_First() => Breadth_First_Helper(Root);


IEnumerable<int> Breadth_First_Helper(Node current)
{
if (current == null)
yield break;

Queue<Node> queue = new Queue<Node>();
Queue<Node> queueResult = new Queue<Node>();

queue.Enqueue(current);
while (queue.Count > 0)
{
Node DequeuedNode = queue.Dequeue();
queueResult.Enqueue(DequeuedNode);

if (DequeuedNode.Left != null)
queue.Enqueue(DequeuedNode.Left);

if (DequeuedNode.Right != null)
queue.Enqueue(DequeuedNode.Right);
}

while (queueResult.Count > 0)
yield return queueResult.Dequeue().Value;
}
}
}

0 comments on commit 2d013f7

Please sign in to comment.