In this chapter, we learned about graph-related algorithms, and the implementation of our own trees. Starting from a simple binary tree, we saw several implementations of trees as well as what a balanced tree is. From there, we tackled tree searching and various traversal techniques to understand why most of the F# built-in data structures are actually based on trees.
In the next chapter, we will discuss a custom implementation of a queue. We will then introduce the FSharpX open source collection of functional data structures. Finally, we will explore the F# agent of MailboxProcessor for creating asynchronous work flows, throttling, and post-processing of results of asynchronous calls as an example usage of a queue.