Data Structures And Algorithms In Java Michael T. Goodrich