Data Structures and Algorithms in Python by Goodrich, Tamassia, Goldwasser