# Midterm I Review

## Topics Covered

The first midterm for this class will cover the following topics:

- O(), Ω() and Θ()
- Definitions
- Manipulations of expressions containing O, Ω and Θ

- Running time analysis of code examples
- Iterative Code (loops)
- Recursive Code
- Creating a recurrence relation for a piece of recursive
code
- Solving the recurrence relation using Repeated Substitution,
Recursion Trees, and the Master Method
- Proving bounds using the substiution method

- Stacks, Queues, and Lists
- Using both arrays and linked lists

- Heaps
- Representation of heaps
- Operations (insert / remove min / buildHeap)
- Time bounds

- Binary Search Trees
- Operations (insert / find / remove)
- Time bounds (best / worst / average cases)

- Binary (non-Search) Trees
- Simple tree operations
- Tree traversals (INORDER / PREORDER / POSTORDER)

- General Trees
- Tree representation (left child, right sibling)
- Simple tree operations
- Tree traversals (PREORDER / POSTORDER) (why doesn't INORDER make sense here?)

## Problem Types

You will be expected to solve the followng kinds of problems:

- Given a piece of non-recursive code, find the running time
- Given a piece of recursive code, create a recurrence relation
that describes the running time of the piece of code, and then solve
the recurrence relation using repeated substituion, recursion trees,
or the master method
- Given a recurrence relation and a O() bound, use the substitution
method to prove the bound is correct
- Trace through the operation of a particular data structure /
algorithm. For instance, insert a specified list of elements into a heap,
show the resulting heap, insert a specified list of elements into a
binary search tree, show the tree
- Write a small piece of code (on the order of the in-class
assignmets)
- Find a bug in a piece of code
- "Thinking Question" -- a question that requires some extra
thought, and displays a deeper understanding of the topics.

## How to Study

- Go over homework solutions, be sure that you understand them
- Go over in-class problems, be sure that you understand the solutions
- Go over visualizations, make sure you understand
and can trace through all of the algorithms discussed in class
- Read the class notes (printed)

## Review Problems