Sunteți pe pagina 1din 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

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)

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:

Additional update methods


may be defined by data
structures implementing the
Tree ADT

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)

Make Money Fast!

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

Exercise: Preorder Traversal


In a preorder traversal, a node is
visited before its descendants
List the nodes of this tree in
preorder traversal order.

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

Exercise: Postorder Traversal

In a postorder traversal, a node


is visited after its descendants
List the nodes of this tree in
postorder traversal order.

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

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:

Trees

I
11

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
Trees

12

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?
No

Yes
How about coffee?

On expense account?

Yes

No

Yes

Starbucks

Spikes
Trees

Al Forno

No
Caf Paragon
13

Properties of Binary Trees

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

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.

AlgorithminOrder(v)
ifisInternal(v)
inOrder(leftChild(v))
visit(v)
ifisInternal(v)
inOrder(rightChild(v))
Trees

17

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

Trees

18

Print Arithmetic Expressions


AlgorithmprintExpression(v)
ifisInternal(v)
print(()
print operand or operator when
visiting node
printExpression(leftChild(v))
print ( before traversing left
print(v.element())
subtree
ifisInternal(v)
print ) after traversing right
printExpression(rightChild(v))
subtree
print())

Specialization of an inorder
traversal

b
((2 (a 1)) (3 b))

1
Trees

19

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

AlgorithmevalExpr(v)
ifisExternal(v)
returnv.element()
else
xevalExpr(leftChild(v))
yevalExpr(rightChild(v))
operatorstoredatv
returnxy

2
5

1
Trees

20

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

Trees

21

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)

R
B

5
Trees

1
22

Template Method Pattern

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);
}
};

// other details omitted

Trees

24

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
C
Trees

25

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
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)

Examples of updates for


binary trees
expandExternal(v)
removeAboveExternal(w)

A
w
B
Trees

C
27

S-ar putea să vă placă și