Algorithms and Data Structures in Scala (Purely Functional Approach)