2. Define the predicate empty-tree? to return #t if its argument is the empty tree and #f otherwise.
3. Define the constructor make-tree so that (make-tree <left-subtree> <entry> <right-subtree>) returns the list (<left-subtree> <entry> <right-subtree>).
4. Define the selectors left-tree, entry and right-tree to return the left-subtree, entry and right-subtree, respectively. They should return #f when applied to the empty tree.
5. Define the operator adjoin so that the call (adjoin n <tree>) returns a new tree with integer n inserted in the appropriate place. (See example behavior below.) This tree represents a set, so each integer can appear in it only once. Use arithmetic comparison operators such as = and < as needed.
6. Define list-to-tree to be the operator that takes a list of integers (in any order) and returns the tree representing that list interpreted as a set. Do not use an auxiliary procedure. See behavior below for clues about how this procedure should be defined. (The definition is about as simple as it can get.)
7. Define tree-to-list to be the operator that converts a tree representation of a set into a list representation of a set with the integers in ascending order. You have permission to use the append procedure in your definition if you wish.
8. The behavior of the operators should match this example:
> (define t1 (list-to-tree '(9 2 3 7))) > t1 (((() 2 ()) 3 ()) 7 (() 9 ())) > (tree-to-list t1) (2 3 7 9) > (adjoin 5 t1) (((() 2 ()) 3 (() 5 ())) 7 (() 9 ()))9. Submit your code to the Automated Tester; be sure to confirm the response so that we have a record of your submission and its evaluation.