Lecture 21

BST and tree traversals

MCS 275 Spring 2022
David Dumas

Lecture 21: BST and tree traversals

Course bulletins:

  • Worksheet 8 available.
  • Project 2 grading underway.
  • I know project 2 proved to be challenging for many students.
  • Project 3 will be posted this week, is due Friday 18 March.

Update BST class

Let's make it so that BST() is considered a valid, empty tree.


I added a module to the trees sample code folder which can generate random trees. You'll use it in lab this week.


As a sample application of BST, we can make a class that stores a set of integers, supporting membership testing and adding new elements.

Compare alternatives:

  • Unsorted list - fast to insert, but slow membership test
  • Sorted list - fast membership test, slow insert

Implementation Hiding

To use BST, you need to know about and work with Node objects.

In contrast, IntegerSet has an interface based directly on the values to be stored. It hides the fact that its implementation uses a BST.

Walking a tree

Back to discussing binary trees (not necessarily BST).

For some purposes we need to visit every node in a tree and perform some action on them.

To do this is to traverse or walk the tree.

Named traversals

The three most-often used recursive traversals:

  • preorder - Node, left subtree, then right subtree.
  • postorder - Left subtree, right subtree, then node.
  • inorder - Left subtree, node, then right subtree.

Note: They all visit left child before right child.

Preorder traversal

node, left, right

Preorder traversal

Typical use: Make a copy of the tree.

Insert the keys into an empty BST in this order to recreate the original tree.

Postorder traversal

left, right, node

Postorder traversal

Typical use: Delete the tree.

If you delete keys in postorder, then you will only ever be removing nodes without children.

Inorder traversal

left, node, right

Inorder traversal

Typical use: Turn a BST into a sorted list of keys.


Revision history

  • 2022-02-28 Initial publication