trees. outline and reading tree definitions and adt (§7.1) tree traversal algorithms for general...

35
Trees

Upload: richard-mcgee

Post on 29-Dec-2015

218 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Trees

Page 2: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Outline and Reading

• Tree Definitions and ADT (§7.1)• Tree Traversal Algorithms for General Trees

(preorder and postorder) (§7.2)• BinaryTrees (§7.3)

• Data structures for trees (§7.1.4 and §7.3.4)• Traversals of Binary Trees (preorder, inorder,

postorder) (§7.3.6)• Euler Tours (§7.3.7)

Page 3: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

Computers”R”Us

Sales R&DManufacturing

Laptops DesktopsUS International

Europe Asia Canada

Page 4: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 DC

G HE F

I J K

• Subtree: tree consisting of a node and its descendants

Page 5: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 DC

G HE F

I J K

Page 6: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

Page 7: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

A Linked Structure for General Trees• A node is represented by an

object storing• Element• Parent node• Sequence of children

nodes• Node objects implement the

Position ADT

B

A D F

C

E

B

DA

C E

F

Page 8: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

A Linked Structure for General Trees• A node is represented by an

object storing• Element• Parent node• Sequence of children

nodes• Node objects implement the

Position ADT

B

A D F

C

E

B

DA

C E

F

Page 9: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

A Linked Structure for General Trees• A node is represented by an

object storing• Element• Parent node• Sequence of children

nodes• Node objects implement the

Position ADT

B

A D F

C

E

B

DA

C E

F

Page 10: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

A Linked Structure for General Trees• A node is represented by an

object storing• Element• Parent node• Sequence of children

nodes• Node objects implement the

Position ADT

B

DA

C E

F

B

A D F

C

E

Page 11: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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)

Data Structures & Algorithms

1. A C++ Primer Bibliography2. Object-Oriented Design

2.1 Goals, Principles,and Patterns

2.2 Inheritance andPolymorphism

1.1 Basic C++ Programming Elements

1.2 Expressions 2.3 Templates

1

2

3

5

46

7 8

9

Page 12: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 DC

G HE F

I J K

Page 13: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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.txt1Kprograms/

DDR.java10K

Stocks.java25K

h1c.doc3K

h1nc.doc2K

Robot.java20K

9

3

1

7

2 4 5 6

8

Page 14: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 DC

G HE F

I J K

Page 15: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 GD E

H I

Page 16: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

Page 17: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 Antonio’s Veritas Chili’s

Yes No

Yes No Yes No

Page 18: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Properties of Binary Trees

• Notationn number of nodesl number of leavesi number of internal

nodesh height

• Properties:• l i 1• n 2l 1• h i• h (n 1)2• l 2h

• h log2 l

• h log2 (n 1) 1

Page 19: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Properties of Binary Trees

• Full (or proper) binary tree• All nodes have either 0 or 2 children

Page 20: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Properties of Binary Trees

• Complete binary tree with height h• All 2h-1 nodes exist at height h-1• Nodes at level h fill up left to right

Page 21: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

Page 22: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

A Linked 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

DA

C E

B

A D

C E

Page 23: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

Page 24: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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.

Algorithm inOrder(v)if isInternal(v)

inOrder(leftChild(v))visit(v)if isInternal(v)

inOrder(rightChild(v))

A

B C

G HE F

I K

Page 25: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

Page 26: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

Page 27: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 isLeaf(v)

return v.element()else

x evalExpr(leftChild(v))

y evalExpr(rightChild(v))

operator stored at vreturn x y

2

a 1

3 b

Page 28: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Exercise: Arithmetic Expressions

• Draw an expression tree that has • Four leaves, storing the values 2, 4, 8, and 8• 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 24

Page 29: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Exercise: Arithmetic Expressions

• Draw an expression tree that has • Four leaves, storing the values 2, 4, 8, and 8• 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 24

8 8 2 4

Page 30: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Exercise: Arithmetic Expressions

• Draw an expression tree that has • Four leaves, storing the values 1, 3, 4, and 8• 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 24

Page 31: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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

LB

R

Page 32: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Euler Tour TraversalAlgorithm eulerTour(p) left-visit-action(p) if isInternal(p)

eulerTour(p.left())bottom-visit-action(p)if isInternal(p)

eulerTour(p.right())right-visit-action(p)

End Algorithm

2

5 1

3 2

LB

R

Page 33: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

Print Arithmetic Expressions• Specialization of an Euler Tour

traversal• Left-visit-action: if node is

internal, print “(“ • Bottom-visit-action: print value

or operator stored at node• Right-visit-action: if node is

internal, print “)”

Algorithm printExpression(p)if isExternal(p) then

print value stored at pElse

print “(“printExpression(p.left())Print the operator stored at pprintExpression(p.right())

print “)”Endif

End Algorithm

2

a 1

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

Page 34: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 visitLeaf(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–>isLeaf(p)) {

visitLeaf(p, r); return r.finalResult; } 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

Page 35: Trees. Outline and Reading Tree Definitions and ADT (§7.1) Tree Traversal Algorithms for General Trees (preorder and postorder) (§7.2) BinaryTrees (§7.3)

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 visitLeaf(Position p, Result r) { r.finalResult = p.element().value();

}

void visitRight(Position p, Result r) {Operator op = p.element().operator();r.finalResult = op.operation(

r.leftResult, r.rightResult); }

// … other details omitted};