Trees
Trees
In this example,
the data
contained at
each node is
one of the 50
states.
A Binary Tree of States
Each node is
permitted to
have two links
to other nodes,
called the left
child and the
right child.
A Binary Tree of States
Children are
usually drawn
below a node.
Some nodes
have only one
child.
Arkansas has a
left child, but no
right child.
A Quiz
Some nodes
have only one
child.
Some nodes
have only one
child.
Florida has
only a right child.
A Binary Tree of States
A node with no
children is
called a leaf.
A Binary Tree of States
Each node is
called the
parent of its
children.
Washington is the
parent of Arkansas
and Colorado.
A Binary Tree of States
Arkansas
and Colorado
are siblings.
Complete Binary Trees
A complete
binary tree is a
special kind of
binary tree
which will be
useful to us.
Complete Binary Trees
A complete
binary tree is a
special kind of
binary tree
which will be
useful to us. When a complete
binary tree is built,
its first node must be
the root.
Complete Binary Trees
The second node of a
complete binary tree
is always the left
child of the root...
Complete Binary Trees
The second node of a
complete binary tree
is always the left
child of the root...
... and the third node
is always the right
child of the root.
Complete Binary Trees
The next
nodes must
always fill
the next level
from left to
right.
Complete Binary Trees
The next
nodes must
always fill
the next level
from left to
right.
Complete Binary Trees
The next
nodes must
always fill
the next level
from left to
right.
Complete Binary Trees
The next
nodes must
always fill
the next level
from left to
right.
Complete Binary Trees
The next
nodes must
always fill
the next level
from left to
right.
Complete Binary Trees
The next
nodes must
always fill
the next level
from left to
right.
Is This Complete?
Is This Complete?
Is This Complete?
Is This Complete?
Is This Complete?
Yes!
It is called the empty tree,
and it has no nodes,
not even a root.
Implementing a Complete Binary
Tree
• We will store the data from the nodes
in a partially-filled array.
3 An integer to keep
track of how many nodes are in the tree
An array of data
We don't care what's in
this part of the array.
Implementing a Complete Binary
Tree
• We will store the date from the nodes
in a partially-filled array.
3 An integer to keep
track of how many nodes are in the tree
D=0
N=1 D=1 D=1
N=3 N=2 D=2 D=2
N=7 N=4
Depth of Complete Binary Tree
Given a complete binary tree of N nodes,
what is the depth?
D=0
N=1 D=1 D=1
N=3 N=2 D=2 D=2
N=7 N=4
D = floor(log N) = O(log N)
Depth of Binary Tree
Given a binary tree of N nodes, what is the
maximum possible depth?
D=0
N=1 D=2
N=3 D=4
N=5
D = O(N)
Summary
• Binary trees contain nodes.
• Each node may have a left child and a right child.
• If you start from any node and move upward, you
will eventually reach the root.
• Every node except the root has one parent. The
root has no parent.
• Complete binary trees require the nodes to fill in
each level from left-to-right before starting the
next level.
Binary Search Trees
• A dictionary is a collection
of items, similar to a bag.
• But unlike a bag, each item
has a string attached to it,
called the item's key.
The Dictionary Data Type
• A dictionary is a collection
of items, similar to a bag.
• But unlike a bag, each item
has a string attached to it,
called the item's key.
Example:
The items I am
storing are records
containing data
about a state.
The Dictionary Data Type
• A dictionary is a collection
of items, similar to a bag.
• But unlike a bag, each item
has a string attached to it,
called the item's key.
Example:
The key for each
record is the name
of the state.
Washington
The Dictionary Data Type
void Dictionary::insert(The key for the new item, The new item);
gt o n
ashin
W
The Dictionary Data Type
• When you want to retrieve an
item, you specify the key...
Item Dictionary::retrieve("Washington");
The Dictionary Data Type
When you want to retrieve an
item, you specify the
key... ... and the retrieval
procedure returns the item.
Item Dictionary::retrieve("Washington");
The Dictionary Data Type
F lo
ri d a
The data in the
dictionary will
be stored in a Colorado Oklahoma
binary tree,
with each node Mass.
Arizona
containing an Washington
Hampshire
New
Virginia
West
Arkansas
A Binary Search Tree of States
F lo
ri d a
Storage rules:
1. Every key to the left
Colorado Oklahoma
of a node is
alphabetically before
the key of the node. Arizona Mass.
Washington
Hampshire
New
Virginia
West
Arkansas
A Binary Search Tree of States
F lo
ri d a
Storage rules:
1. Every key to the left
Colorado Oklahoma
of a node is
alphabetically before
the key of the node. Arizona Mass.
Washington
Example:
' Massachusetts' and
Hampshire
' New Hampshire'
New
Virginia
West
are alphabetically Arkansas
before 'Oklahoma'
A Binary Search Tree of States
F lo
ri d a
Storage rules:
1. Every key to the left
Colorado Oklahoma
of a node is
alphabetically before
the key of the node. Arizona Mass.
Washington
2. Every key to the
right of a node is
Hampshire
alphabetically after
New
Virginia
West
Arkansas
the key of the node.
A Binary Search Tree of States
F lo
ri d a
Storage rules:
1. Every key to the left
Colorado Oklahoma
of a node is
alphabetically before
the key of the node. Arizona Mass.
Washington
2. Every key to the
right of a node is
Hampshire
alphabetically after
New
Virginia
West
Arkansas
the key of the node.
Retrieving Data
F lo
ri d a
Start at the root.
1. If the current node has
the key, then stop and Colorado Oklahoma
Hampshire
3. If the current node's
New
key is too small, move
Virginia
West
Arkansas
right and repeat 1-3.
Retrieve ' New Hampshire'
F lo
ri d a
Start at the root.
1. If the current node has the
key, then stop and
Colorado Oklahoma
retrieve the data.
2. If the current node's key is
too large, move left and Mass.
Arizona
repeat 1-3. Washington
Hampshire
too small, move right
New
and repeat 1-3.
Virginia
West
Arkansas
Retrieve 'New Hampshire'
F lo
ri d a
Start at the root.
1. If the current node has the
key, then stop and Colorado Oklahoma
retrieve the data.
2. If the current node's key is
too large, move left and Arizona
Mass.
Washington
repeat 1-3.
3. If the current node's key is
Hampshire
too small, move right
New
Virginia
and repeat 1-3.
West
Arkansas
Retrieve 'New Hampshire'
F lo
ri d a
Start at the root.
1. If the current node has the
key, then stop and Colorado Oklahoma
retrieve the data.
2. If the current node's key is
too large, move left and Arizona
Mass.
Washington
repeat 1-3.
3. If the current node's key is
Hampshire
too small, move right
New
Virginia
and repeat 1-3.
West
Arkansas
Retrieve 'New Hampshire'
F lo
ri d a
Start at the root.
1. If the current node has the
key, then stop and Colorado Oklahoma
retrieve the data.
2. If the current node's key is
too large, move left and Arizona
Mass.
Washington
repeat 1-3.
3. If the current node's key is
Hampshire
too small, move right
New
Virginia
and repeat 1-3.
West
Arkansas
Retrieval: Complexity
• Given a complete tree of N items, the depth D =
O(log N).
• What is the maximum number of nodes tested to
retrieve an item from the binary search tree if we
use a complete tree?
• What is the maximum number of nodes tested
(worst case) to retrieve an item from a binary
search tree that is not complete or balanced?
Adding a New Item with a
Given Key
F lo
ri d a
1. Pretend that you are
trying to find the key,
but stop when there is Colorado Oklahoma
Hampshire
if there had been a
New
Virginia
West
Arkansas
node.
Iowa
Adding
F lo
ri d a
1. Pretend that you are
trying to find the key,
but stop when there is Colorado Oklahoma
Hampshire
if there had been a
New
Virginia
West
Arkansas
node.
Iowa
Adding
F lo
ri d a
1. Pretend that you are
trying to find the key,
but stop when there is Colorado Oklahoma
Hampshire
if there had been a
New
Virginia
West
Arkansas
node.
Iowa
Adding
F lo
ri d a
1. Pretend that you are
trying to find the key,
but stop when there is Colorado Oklahoma
Hampshire
if there had been a
New
Virginia
West
Arkansas
node.
Iowa
Adding
F lo
ri d a
1. Pretend that you are
trying to find the key,
but stop when there is Colorado Oklahoma
Hampshire
if there had been a
New
Virginia
West
Arkansas
node.
Iowa
Adding
F lo
ri d a
1. Pretend that you are
trying to find the key,
but stop when there is Colorado Oklahoma
Hampshire
if there had been a
New
Virginia
West
Arkansas
node.
Adding
F lo
ri d a
1. Pretend that you are
trying to find the key,
but stop when there is Colorado Oklahoma
Hampshire
if there had been a
New
Virginia
West
Arkansas
node.
Ka
z ak h
st a
n
Adding
F lo
ri d a
Where would you
Oklahoma
add this state? Colorado
Mass.
Arizona
Washington
Iowa
Hampshire
New
Virginia
West
Arkansas
Adding
F lo
ri d a
Kazakhstan is the
new right child Colorado Oklahoma
of Iowa?
Mass.
Arizona
Washington
Iowa
Hampshire
New
Virginia
West
Arkansas
Ka
z ak h
st a
n
Adding: Complexity
• Given a complete tree of N items, the depth D =
O(log N).
• What is the maximum number of nodes tested to
add an item to the binary search tree if we use a
complete tree?
• What is the maximum number of nodes tested
(worst case) to add an item from a binary search
tree that is not complete or balanced?
Removing an Item with a
Given Key
F lo
ri d a
1. Find the item.
2. If necessary, swap the
Colorado Oklahoma
item with one that is
easier to remove.
3. Remove the item. Arizona
Mass.
Washington
Iowa
Hampshire
New
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
F lo
ri d a
1. Find the item.
Colorado Oklahoma
Mass.
Arizona
Washington
Iowa
Hampshire
New
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
F lo
ri d a
Colorado Oklahoma
Mass.
Arizona
Washington
Florida cannot be
removed at the Iowa
Hampshire
moment...
New
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
Colorado Oklahoma
Mass.
Arizona
... because removing Washington
Hampshire
break the tree into
New
two pieces.
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
F lo
ri d a
1. If necessary, do some
rearranging.
Colorado Oklahoma
Mass.
Arizona
The problem of Washington
Hampshire
happens because
New
Florida has 2 children.
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
F lo
ri d a
If necessary, do some
rearranging.
Colorado Oklahoma
Mass.
Arizona
Washington
For the rearranging,
take the smallest item Iowa
Hampshire
in the right subtree...
New
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
Iowa
If necessary, do some
rearranging.
Colorado Oklahoma
Mass.
Arizona
Washington
...copy that smallest
item onto the item Iowa
Hampshire
that we're removing...
New
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
Iowa
If necessary, do some
rearranging.
Colorado Oklahoma
Mass.
Arizona
Washington
... and then remove
the extra copy of the
Hampshire
item we copied...
New
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
Iowa
If necessary, do some
rearranging.
Colorado Oklahoma
Mass.
Arizona
Washington
Ka
... and reconnect za kh
st an
Hampshire
the tree
New
Virginia
West
Arkansas
Removing 'Florida'
F lo
ri d a
Colorado Oklahoma
Mass.
Arizona
Why did we choose Washington
Hampshire
in the right subtree?
New
Virginia
West
Arkansas
Ka
za kh
st a
n
Removing 'Florida'
Iowa
Colorado Oklahoma
Mass.
Arizona
Washington
Because every key Ka
za
must be smaller than kh
st an
Hampshire
the keys in its
New
Virginia
right subtree
West
Arkansas
Removing an Item with a
Given Key
1. Find the item.
2. If the item has a right child, rearrange the tree:
1. Find smallest item in the right subtree
2. Copy that smallest item onto the one that you
want to remove
3. Remove the extra copy of the smallest item
(making sure that you keep the tree connected)
3. else just remove the item.
Summary
• Binary search trees are a good implementation of
data types such as sets, bags, and dictionaries.
• Searching for an item is generally quick since you
move from the root to the item, without looking at
many other items.
• Adding and deleting items is also quick.
• But as you'll see later, it is possible for the
quickness to fail in some cases -- can you see
why?