Documente Academic
Documente Profesional
Documente Cultură
Trees
What is a Tree
In computer science, a
tree is an abstract model
of a hierarchical structure
A tree consists of nodes
with a parent-child
relation
Applications:
Organization charts
File systems
Programming
environments
ComputersRUs
Sales
US
Europe
Trees
Manufacturing
International
Asia
Laptops
R&D
Desktops
Canada
Tree Terminology
Subtree: tree consisting of
Root: node without parent (A)
a node and its
Internal node: node with at least one
descendants
child (A, B, C, F)
A
Leaf (aka External node): node
without children (E, I, J, K, G, H, D)
Ancestors of a node: parent,
C
B
grandparent, great-grandparent, etc.
Depth of a node: number of
ancestors
G
F
H
Height of a tree: maximum depth of E
any node (3)
Descendant of a node: child,
I
J
K
grandchild, great-grandchild, etc.
Trees
subtee
Exercise: Trees
Answer the following questions about
the tree shown on the right:
What is the size of the tree (number of
nodes)?
Classify each node of the tree as a root,
leaf, or internal node
List the ancestors of nodes B, F, G, and
A. Which are the parents?
List the descendents of nodes B, F, G,
and A. Which are the children?
List the depths of nodes B, F, G, and A.
What is the height of the tree?
Draw the subtrees that are rooted at
node F and at node K.
Trees
Tree ADT
We use positions to abstract
nodes
Generic methods:
integer size()
boolean isEmpty()
objectIterator elements()
positionIterator positions()
boolean isInternal(p)
boolean isLeaf (p)
boolean isRoot(p)
position root()
position parent(p)
positionIterator children(p)
Trees
Update methods:
swapElements(p, q)
object replaceElement(p, o)
Accessor methods:
Query methods:
Preorder Traversal
A traversal visits the nodes of a
tree in a systematic manner
In a preorder traversal, a node is
visited before its descendants
Application: print a structured
document
1
AlgorithmpreOrder(v)
visit(v)
foreachchildwofv
preOrder(w)
1. Motivations
9
2. Methods
1.1 Greed
1.2 Avidity
6
2.1 Stock
Fraud
Trees
7
2.2 Ponzi
Scheme
References
8
2.3 Bank
Robbery
7
AlgorithmpreOrder(v)
visit(v)
foreachchildwofv
preOrder(w)
Trees
Postorder Traversal
In a postorder traversal, a node
is visited after its descendants
Application: compute space
used by files in a directory and
its subdirectories
9
AlgorithmpostOrder(v)
foreachchildwofv
postOrder(w)
visit(v)
cs16/
homeworks/
todo.txt
1K
programs/
h1c.doc
3K
h1nc.doc
2K
4
DDR.java
10K
Trees
5
Stocks.java
25K
6
Robot.java
20K
9
AlgorithmpostOrder(v)
foreachchildwofv
postOrder(w)
visit(v)
Trees
10
Binary Tree
A binary tree is a tree with the
following properties:
arithmetic expressions
decision processes
searching
Applications:
Trees
I
11
2
a
1
Trees
12
Decision Tree
Binary tree associated with a decision process
internal nodes: questions with yes/no answer
leaves: decisions
Yes
How about coffee?
On expense account?
Yes
No
Yes
Starbucks
Spikes
Trees
Al Forno
No
Caf Paragon
13
Notation
n number of nodes
l number of leaves
i number of internal nodes
h height
Properties:
li1
n 2l 1
h i
h (n 1)2
l 2h
h log2 l
h log2 (n 1) 1
Trees
14
BinaryTree ADT
The BinaryTree ADT
extends the Tree
ADT, i.e., it inherits
all the methods of
the Tree ADT
Additional methods:
Update methods
may be defined by
data structures
implementing the
BinaryTree ADT
position leftChild(p)
position rightChild(p)
position sibling(p)
Trees
15
Inorder Traversal
In an inorder traversal a
node is visited after its left
subtree and before its right
subtree
Application: draw a binary
tree
x(v) = inorder rank of v
y(v) = depth of v
6
AlgorithminOrder(v)
ifisInternal(v)
inOrder(leftChild(v))
visit(v)
ifisInternal(v)
inOrder(rightChild(v))
4
3
5
Trees
16
AlgorithminOrder(v)
ifisInternal(v)
inOrder(leftChild(v))
visit(v)
ifisInternal(v)
inOrder(rightChild(v))
Trees
17
Trees
18
Specialization of an inorder
traversal
b
((2 (a 1)) (3 b))
1
Trees
19
AlgorithmevalExpr(v)
ifisExternal(v)
returnv.element()
else
xevalExpr(leftChild(v))
yevalExpr(rightChild(v))
operatorstoredatv
returnxy
2
5
1
Trees
20
Trees
21
R
B
5
Trees
1
22
class EulerTour {
Generic algorithm that can protected:
be specialized by
BinaryTree* tree;
redefining certain steps
virtual void visitExternal(Position p, Result r) { }
virtual void visitLeft(Position p, Result r) { }
Implemented by means of
virtual void visitBelow(Position p, Result r) { }
an abstract C++ class
virtual void visitRight(Position p, Result r) { }
Visit methods that can be
int eulerTour(Position p) {
redefined by subclasses
Result r = initResult();
if (tree>isExternal(p)) { visitExternal(p, r); }
Template method eulerTour
else {
Recursively called on the
visitLeft(p, r);
left and right children
r.leftResult = eulerTour(tree>leftChild(p));
A Result object with fields
visitBelow(p, r);
leftResult, rightResult and
r.rightResult = eulerTour(tree>rightChild(p));
finalResult keeps track of
visitRight(p, r);
the output of the recursive
return r.finalResult;
calls to eulerTour
} // other details omitted
Trees
23
Specializations of EulerTour
We show how to
specialize class EulerTour
to evaluate an arithmetic
expression
Assumptions
External nodes support a
function value(), which
returns the value of this
node.
Internal nodes provide a
function operation(int,
int), which returns the
result of some binary
operator on integers.
class EvaluateExpression
: public EulerTour {
protected:
void visitExternal(Position p, Result r) {
r.finalResult = p.element().value();
}
void visitRight(Position p, Result r) {
Operator op = p.element().operator();
r.finalResult = p.element().operation(
r.leftResult, r.rightResult);
}
};
Trees
24
B
D
A
C
E
C
Trees
25
Element
Parent node
Left child node
Right child node
B
A
D
C
E
Trees
E
26
C++ Implementation
Tree interface
BinaryTree interface
extending Tree
Classes implementing Tree
and BinaryTree and
providing
expandExternal(v)
Constructors
Update methods
Print methods
removeAboveExternal(w)
A
w
B
Trees
C
27