Você está na página 1de 27

CINS 5063

Data Structures and Algorithms


Dr. Lei Huang
lhuang@pvamu.edu
Office: SR Collins 314

Acknowledgement: These slides are adapted from slides provided with
Data Structures and Algorithms in C++, Goodrich, Tamassia and Mount
(Wiley 2004) and Dr. Nancy Amato from TAMU


Trees
Outline and Reading
Tree ADT (6.1)
Preorder and postorder traversals (6.2.3)
BinaryTree ADT (6.3.1)
Inorder traversal (6.3.4)
Euler Tour traversal (6.3.4)
Template method pattern (6.3.5)
Data structures for trees (6.4)
C++ implementation (6.4.2)
2
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 R&D Manufacturing
Laptops Desktops US International
Europe Asia Canada
3
Trees
subtee
Tree Terminology
Root: node without parent (A)
Internal node: node with at least one
child (A, B, C, F)
Leaf (aka External node): node
without children (E, I, J, K, G, H, D)
Ancestors of a node: parent,
grandparent, great-grandparent, etc.
Depth of a node: number of
ancestors
Height of a tree: maximum depth of
any node (3)
Descendant of a node: child,
grandchild, great-grandchild, etc.
A
B
D
C
G H E F
I J K
Subtree: tree consisting of
a node and its
descendants
4
Trees
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.

A
B D C
G H E F
I J K
5
Trees
Tree ADT
We use positions to abstract
nodes
Generic methods:
integer size()
boolean isEmpty()
objectIterator elements()
positionIterator positions()
Accessor methods:
position root()
position parent(p)
positionIterator children(p)
Query methods:
boolean isInternal(p)
boolean isLeaf (p)
boolean isRoot(p)
Update methods:
swapElements(p, q)
object replaceElement(p, o)
Additional update methods
may be defined by data
structures implementing the
Tree ADT
6
Trees
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
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder(w)
Make Money Fast!
1. Motivations References 2. Methods
2.1 Stock
Fraud
2.2 Ponzi
Scheme
1.1 Greed 1.2 Avidity
2.3 Bank
Robbery
1
2
3
5
4
6 7 8
9
7
Trees
Exercise: Preorder Traversal
In a preorder traversal, a node is
visited before its descendants
List the nodes of this tree in
preorder traversal order.
Algorithm preOrder(v)
visit(v)
for each child w of v
preOrder (w)
A
B D C
G H E F
I J K
8
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
Algorithm postOrder(v)
for each child w of v
postOrder(w)
visit(v)
cs16/
homeworks/
todo.txt
1K
programs/
DDR.java
10K
Stocks.java
25K
h1c.doc
3K
h1nc.doc
2K
Robot.java
20K
9
3
1
7
2 4 5 6
8
9
Trees
Exercise: Postorder Traversal
Algorithm postOrder(v)
for each child w of v
postOrder(w)
visit(v)
In a postorder traversal, a node
is visited after its descendants
List the nodes of this tree in
postorder traversal order.
A
B D C
G H E F
I J K
10
Trees
Binary Tree
A binary tree is a tree with the
following properties:
Each internal node has two children
The children of a node are an
ordered pair
We call the children of an internal
node left child and right child
Alternative recursive definition: a
binary tree is either
a tree consisting of a single node, or
a tree whose root has an ordered
pair of children, each of which is a
binary tree
Applications:
arithmetic expressions
decision processes
searching
A
B C
F G D E
H I
11
Trees
Arithmetic Expression Tree
Binary tree associated with an arithmetic expression
internal nodes: operators
leaves: operands
Example: arithmetic expression tree for the
expression (2 (a - 1) + (3 b))
+

-
2
a 1
3 b
12
Trees
Decision Tree
Binary tree associated with a decision process
internal nodes: questions with yes/no answer
leaves: decisions
Example: dining decision
Want a fast meal?
How about coffee? On expense account?
Starbucks Spikes Al Forno Caf Paragon
Yes No
Yes No Yes No
13
Trees
Properties of Binary Trees
Notation
n number of nodes
l number of leaves
i number of internal nodes
h height
Properties:
l = i + 1
n = 2l - 1
h i
h (n - 1)/2
l 2
h
h log
2
l
h log
2
(n + 1) - 1


14
Trees
BinaryTree ADT
The BinaryTree ADT
extends the Tree
ADT, i.e., it inherits
all the methods of
the Tree ADT
Additional methods:
position leftChild(p)
position rightChild(p)
position sibling(p)
Update methods
may be defined by
data structures
implementing the
BinaryTree ADT


15
Trees
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
Algorithm inOrder(v)
if isInternal(v)
inOrder(leftChild(v))
visit(v)
if isInternal(v)
inOrder(rightChild(v))
3
1
2
5
6
7 9
8
4
16
Trees
Exercise: Inorder Traversal
In an inorder traversal a node is
visited after its left subtree and
before its right subtree
List the nodes of this tree in
inorder traversal order.
A
B D C
G H E F
I J K
Algorithm inOrder(v)
if isInternal(v)
inOrder(leftChild(v))
visit(v)
if isInternal(v)
inOrder(rightChild(v))
17
Trees
Exercise: Preorder & InOrder Traversal
Draw a (single) binary tree T, such that
Each internal node of T stores a single character
A preorder traversal of T yields EXAMFUN
An inorder traversal of T yields MAFXUEN

18
Trees
Print Arithmetic Expressions
Specialization of an inorder
traversal
print operand or operator when
visiting node
print ( before traversing left
subtree
print ) after traversing right
subtree
Algorithm printExpression(v)
if isInternal(v)
print(()
printExpression(leftChild(v))
print(v.element())
if isInternal(v)
printExpression(rightChild(v))
print ())
+

-
2
a 1
3 b
((2 (a - 1)) + (3 b))
19
Trees
Evaluate Arithmetic Expressions
Specialization of a postorder
traversal
recursive method returning
the value of a subtree
when visiting an internal
node, combine the values of
the subtrees
Algorithm evalExpr(v)
if isExternal(v)
return v.element()
else
x evalExpr(leftChild(v))
y evalExpr(rightChild(v))
operator stored at v
return x y
+

-
2
5 1
3 2
20
Trees
Exercise: Arithmetic Expressions
Draw an expression tree that has
Four leaves, storing the values 2, 5, 6, and 7
3 internal nodes, storing operations +, -, *, /
(operators can be used more than once, but each
internal node stores only one)
The value of the root is 21

21
Trees
Euler Tour Traversal
Generic traversal of a binary tree
Includes as special cases the preorder, postorder and inorder traversals
Walk around the tree and visit each node three times:
on the left (preorder)
from below (inorder)
on the right (postorder)
+

-
2
5 1
3 2
L
B
R

22
Trees
Template Method Pattern
Generic algorithm that can
be specialized by
redefining certain steps
Implemented by means of
an abstract C++ class
Visit methods that can be
redefined by subclasses
Template method eulerTour
Recursively called on the
left and right children
A Result object with fields
leftResult, rightResult and
finalResult keeps track of
the output of the recursive
calls to eulerTour
class EulerTour {
protected:
BinaryTree* tree;
virtual void visitExternal(Position p, Result r) { }
virtual void visitLeft(Position p, Result r) { }
virtual void visitBelow(Position p, Result r) { }
virtual void visitRight(Position p, Result r) { }
int eulerTour(Position p) {
Result r = initResult();
if (tree>isExternal(p)) { visitExternal(p, r); }
else {
visitLeft(p, r);
r.leftResult = eulerTour(tree>leftChild(p));
visitBelow(p, r);
r.rightResult = eulerTour(tree>rightChild(p));
visitRight(p, r);
return r.finalResult;
} // other details omitted
23
Trees
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);
}
// other details omitted
};
24
Trees

Data Structure for Trees
A node is represented by
an object storing
Element
Parent node
Sequence of children
nodes
Node objects implement
the Position ADT
B
D
A
C E
F
B

A D F

C

E
25
Trees
Data Structure for Binary Trees
A node is represented by
an object storing
Element
Parent node
Left child node
Right child node
Node objects implement
the Position ADT
B
D
A
C E


B
A D
C E

26
Trees
C++ Implementation
Tree interface
BinaryTree interface
extending Tree
Classes implementing Tree
and BinaryTree and
providing
Constructors
Update methods
Print methods
Examples of updates for
binary trees
expandExternal(v)
removeAboveExternal(w)
A

expandExternal(v)
A
C B
B
removeAboveExternal(w)
A
v
v
w
27

Você também pode gostar