# Problem Solving with Algorithms and Data Structures using Java: The Interactive Edition

## Section6.22Trees: Exercises

### ExercisesExercises

#### 1.

Trace the algorithm for creating an expression tree for the expression $$(4 * 8) / 6 - 3\text{.}$$

#### 2.

Consider the following list of integers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Show the binary search tree resulting from inserting the integers in the list.

#### 3.

Consider the following list of integers: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]. Show the binary search tree resulting from inserting the integers in the list.

#### 4.

Generate a random list of integers. Show the binary heap tree resulting from inserting the integers on the list one at a time.

#### 5.

Using the list from the previous question, show the binary heap tree resulting from using the list as a parameter to the heapify method. Show both the tree and list form.

#### 6.

Draw the binary search tree that results from inserting the following keys in the order given: 68, 88, 61, 89, 94, 50, 4, 76, 66, and 82.

#### 7.

Generate a random list of ten integers. Draw the binary search tree resulting from inserting the integers on the list.

#### 8.

Consider the following list of integers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Show the binary heap resulting from inserting the integers one at a time.

#### 9.

Consider the following list of integers: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]. Show the binary heap resulting from inserting the integers one at a time.

#### 10.

Consider the two different techniques we used for implementing traversals of a binary tree. Why must we check before the call to preorder when implementing it as a method, whereas we could check inside the call when implementing it as a function?

#### 11.

Show the function calls needed to build the following binary tree.

#### 12.

Given the following tree, perform the appropriate rotations to bring it back into balance.

#### 13.

Using the following as a starting point, derive the equation that gives the updated balance factor for node D.

#### 14.

Extend the buildParseTree method to handle mathematical expressions that do not have spaces between every character.

#### 15.

Modify the buildParseTree and evaluate methods to handle Boolean statements (&&, ||, and !). Remember that ! is a unary operator, so this will complicate your code somewhat.

#### 16.

Using the findSuccessor method, write a non-recursive inorder traversal for a binary search tree.

#### 17.

A threaded binary tree maintains a reference from each node to its successor. Modify the code for a binary search tree to make it threaded, then write a non-recursive inorder traversal method for the threaded binary search tree.

#### 18.

Modify our implementation of the binary search tree so that it handles duplicate keys properly. That is, if a key is already in the tree then the new payload should replace the old rather than add another node with the same key.

#### 19.

Create a binary heap with a limited heap size. In other words, the heap only keeps track of the $$n$$ most important items. If the heap grows in size to more than $$n$$ items the least important item is dropped.

#### 20.

Clean up the expressionToString method so that it does not include an extra set of parentheses around each number.

#### 21.

Using the heapify method, write a sorting method that can sort a list in $$O(n\log{n})$$ time.

#### 22.

Write a method that takes a parse tree for a mathematical expression and calculates the derivative of the expression with respect to some variable.

#### 23.

Implement a binary heap as a max heap.

#### 24.

Using the BinaryHeap class, implement a new class called PriorityQueue. Your PriorityQueue class should implement the constructor plus the enqueue and dequeue methods.

#### 25.

Implement the delete method for an AVL tree.