## Overview

**Tree Representations. ** Before today, trees were an abstract idea. Two common representations are a linked data structure using a node class (representation 1) or an array of key/value pairs (representation 2).

**Traversals. ** When we iterate over a tree, we call this a "tree traversal".

**Depth First Traversals. ** We have three depth first traversals: Pre-order, in-order and post-order. In a pre-order traversal, we visit a node, then traverse its children. In an in-order traversal, we traverse the left child, visit a node, then traverse the right child. In a post-order traversal, we traverse both children before visiting. These are very natural to implement recursively. Pre-order and post-order generalize naturally to trees with arbtirary numbers of children. In-order only makes sense for binary trees.

**Level Order Traversal. ** A level-order traversal visits every item at level 0, then level 1, then level 2, and so forth. One typical implementation for a level order traversal is an iterative-deepening strategy.

**Visitor Pattern. ** To avoid rewriting tree traversal code for every single task, we can create traversal methods that take a function as an argument (wrapped up inside a Java object, as required by Java syntax).

**Asymptotics of Traversals. ** Our depth-first traversals take linear time. Iterative deepening takes between N time and N^2 time. These facts are much less important than their derivations.

## Recommended Problems

### C level

- Question 1 from the Fall 2014 discussion worksheet.
- Question 1 and 2 from Algs4Part1.

### B level

- Question 3 from Algs4Part1. Some randomly generated problems may be slightly out of the scope of our course.
- Question 1 and 2 from Algs4Part1.
- Question 4 from the Fall 2014 midterm.

### A level

- Question 7 from the Guerrilla section worksheet.