MCS 275 Spring 2021
Emily Dumas
Course bulletins:
In mathematics, a graph is a collection of nodes (or vertices) and edges (which join pairs of nodes).
A graph is connected if every pair of nodes can be joined by at least one path.
A graph is connected if every pair of nodes can be joined by at least one path.
A tree is a graph where every pair of nodes can be joined by exactly one path (no more, no less).
A tree is a graph where every pair of nodes can be joined by exactly one path (no more, no less).
Equivalently, a tree is a connected graph with no loops.
Equivalently, a tree is a connected graph that becomes disconnected if any edge is removed.
(Exercise: Prove this is an equivalent definition!)
The trees considered in CS usually have one node distinguished, called the root.
There's nothing special about the root except that it is labeled as such. Any node of a tree could be chosen to be its root node.
Such rooted trees are usually drawn with the root at top
and vertices farther from the root successively lower.
This convention is probably inspired by the way trees look in the natural world.
Choosing a root lets us orient all of the edges so they point away from it.
Hence the usual way of drawing a tree will have these arrows pointing downward.
Each node (except the root) has an incoming edge, from its parent (closer to the root).
Each node may have one or more outgoing edges, to its children (farther from the root).
In CS, a binary tree is a (rooted) tree in which every node has ≤ 2 children, labeled "left" and "right".
Horizontal relative position is used to indicate this labeling, rather than explicitly writing it on the edges.
In CS, a binary tree is a (rooted) tree in which every node has ≤ 2 children, labeled "left" and "right".
Horizontal relative position is used to indicate this labeling, rather than explicitly writing it on the edges.
How can we store a tree in Python?
Make a class Node
, with attribues left
and right
that can be None
or other Node
objects.
We can also store additional information in the nodes of a binary tree. If present, this is called the key or value or cargo of a node.
This turns out to be a very efficient data structure for many purposes. A lot of data can be accessed in a few steps from the root node.
Stores numbers or other objects allowing comparison as node values. Enforce the rule: Each node's left child and its descendents are smaller (or equal) to the node. Each node's right child and its descendents are greater than the node.
This allows a natural way to check if a value is present with a game of "too high / too low".