traverses graph, prioritizing depth first (goes as deep as possible) order pre-order in-order post-order iterative uses a stack data-structure to prepare sequence of steps recursive uses the call stack instead