MCS 275 Spring 2021
Emily Dumas
Course bulletins:
As a reminder, all the tree sample code is available.
Take a Node
object and add it to the tree in a place that maintains the BST property.
The node must have its key
set, but not its parent and children. Insert will handle those.
insert
:
Input: BST T
and a node x
whose key is set, but which has no parent or children.
Goal: Add x
to T
, maintaining the BST property.
T.root
is None
, make x
the root and return.prev=None
and cur=T.root
.x.key
, using cur
to keep track of the current node and prev
the last one visited, continuing until cur
is None
.x
a child of prev
(choosing left or right as suits their keys).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:
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.
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.
The three most-often used recursive traversals:
Note: They all visit left child before right child.
node, left, right
Typical use: Make a copy of the tree.
Insert the keys into an empty BST in this order to recreate the original tree.
left, right, node
Typical use: Delete the tree.
If you delete keys in postorder, then you will only ever be removing nodes without children.
left, node, right
Typical use: Turn a BST into a sorted list of keys.
insert
explanation