Lab #7: Trees and More Part I: Fun with the Java Library. 1. The file ~cs61b/hw/lab7/ListHacker.java has some skeleton methods for you to fill in and a dummy main program. Fill in the methods. The idea is to peruse the List class in the Java library, as well as the Collections class and the Arrays class, looking for methods that do the work for you without your having to write any loops, recursive calls, etc. 2. Test your methods with the debugger. First, try stopping the program by hand at the "stop here" point in the main program and then using the debugger to build lists and call your functions. The local variables in main are a handy place to put them. How can you print the lists your functions produce? 3. Part 2 rapidly gets tedious. GJDB has a 'source' feature that will read debugging commands from a file. Try building such a file with tests of some of your list functions. Then stop in the main program and use the 'source' command in the debugger to run your tests. Part II: Trees On page 94 of the Data Structures Into Java reader, there is a definition of eval on an expression tree. You will find a modified version in ~cs61b/hw/lab7/Expr0.java along with some supporting code. 1. There is no Makefile supplied. Provide one. 2. The definitions of toString and read are incomplete, AND THERE ARE OTHER BUGS. Fill in the missing code and fix the bugs (see the comment on the main program). Now we'll create a re-implementation of Expr0 called Expr, but this we'll do it "the object-oriented way". 3. Copy over the template ~cs61b/hw/lab7/Expr.java Modify it to do the same thing as Expr0. You will have to add new classes (either in Expr.java or in separate files). HOWEVER, do NOT add any more 'if', 'while', 'for', or 'switch' statements or any more ?: operators; just use object-oriented stuff.