Transcript Trees
Trees
Definition of a tree
A tree is a node with a value and zero or more children
Depending on the needs of the program, the children may or may not be
ordered
A
B
F
G
C
H
L
M
D
E
I
J
N
K
A tree has a root, internal
nodes, and leaves
Each node contains an
element and has branches
leading to other nodes (its
children)
Each node (other than the
root) has a parent
Each node has a depth
(distance from the root)
2
More definitions
An empty tree has no nodes
The descendents of a node are its children and the descendents
of its children
The ancestors of a node are its parent (if any) and the
ancestors of its parent
The subtree rooted at a node consists of the given node and all
its descendents
An ordered tree is one in which the order of the children is
important; an unordered tree is one in which the children of a
node can be thought of as a set
The branching factor of a node is the number of children it has
The branching factor of a tree is the average branching factor
of its nodes
3
Data structure for a tree
Each node in a tree has an arbitrary number of children, so we
need something that will hold an arbitrary number of nodes, such
as an ArrayList
class Tree<V> {
V value;
ArrayList children;
}
If we don’t care about the order of children, we might use a Set
instead of a ArrayList
4
ADT for a tree
It must be possible to:
Construct a new tree
If a tree can be empty, this may require a header node
Add a child to a node
Get (iterate through) the children of a node
Access (get and set) the value in a node
It should probably be possible to:
Remove a child (and the subtree rooted at that child)
Get the parent of a node
5
File systems
File systems are almost always implemented as a tree
structure
The nodes in the tree are of (at least) two types: folders (or
directories), and plain files
A folder typically has children—subfolders and plain files
A folder also contains a link to its parent—in both Windows and
UNIX, this link is denoted by ..
In UNIX, the root of the tree is denoted by /
A plain file is typically a leaf
6
Family trees
It turns out that a tree is not a good way to
represent a family tree
Every child has two parents, a mother and a father
Parents frequently remarry
An “upside down” binary tree almost works
Since it is a biological fact (so far) that every child has
exactly two parents, we can use left child = father and
right child = mother
The terminology gets a bit confusing
If you could go back far enough, it becomes a
mathematical certainty that the mother and father have
some ancestors in common
7
Part of a genealogy
Chester
Elaine
Eugene
Pauline
Paul
a
David
Steven
Winfred
Carol
Danielle
Isaac
8
Game trees
Trees are used heavily in implementing games, particularly
board games
A node represents a position on the board
The children of a node represent all the possible moves from
that position
More precisely, the branches from a node represent the possible moves;
the children represent the new positions
Planning ahead (in a game) means choosing a path through the
tree
However—
You can’t have a cycle in a tree
If you can return to a previous position in a game, you have a cycle
Graphs can have cycles
9
Trees for expressions and statements
Examples:
if
?:
>
x
>
x y
y
The expression x > y ? x : y
x
=
=
y max x max y
The statement if (x > y) max = x;
else max = y;
10
More trees for statements
while (n >= 1) {
exp = x * exp;
n--;
}
for (int i = 0; i < n; i++)
a[i] = 0;
for
while
>=
n
=
;
1
=
exp
x
*
--
int
n
i
<
0 i
n
++
=
i
[] 0
a
i
exp
11
The End
12