© 2004 Goodrich, Tamassia Trees1 Lecture 04 Trees Topics Trees Binary Trees Binary Search trees.

26
Trees 1 © 2004 Goodrich, Tamassia Lecture 04 Trees Topics Trees Binary Trees Binary Search trees
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    237
  • download

    2

Transcript of © 2004 Goodrich, Tamassia Trees1 Lecture 04 Trees Topics Trees Binary Trees Binary Search trees.

Trees 1© 2004 Goodrich, Tamassia

Lecture 04 Trees

Topics Trees Binary Trees Binary Search trees

Trees 2© 2004 Goodrich, Tamassia

TreesIn computer science, a tree is an abstract model of a hierarchical structureA tree consists of nodes with a parent-child relationApplications:

Organization charts File systems Programming

environments

Computers”R”Us

Sales R&DManufacturing

Laptops DesktopsUS International

Europe Asia Canada

Trees 3© 2004 Goodrich, Tamassia subtree

TreesTerminologyRoot: node without parent (A)Internal node: node with at least one child (A, B, C, F)External node (a.k.a. leaf ): node without children (E, I, J, K, G, H, D)Ancestors of a node: parent, grandparent, grand-grandparent, etc.Depth of a node: number of ancestorsHeight of a tree: maximum depth of any node (3)Descendant of a node: child, grandchild, grand-grandchild, etc.

A

B DC

G HE F

I J K

Subtree: tree consisting of a node and its descendants

Trees 4© 2004 Goodrich, Tamassia

TreesA 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

Trees 5© 2004 Goodrich, Tamassia

TreesOperations:We use positions to abstract nodesGeneric methods:

integer size() boolean isEmpty() Iterator elements() Iterator positions()

Accessor methods: position root() position parent(p) positionIterator

children(p)

Query methods: boolean isInternal(p) boolean isExternal(p) boolean isRoot(p)

Update method: object replace (p, o)

Additional update methods may be defined by data structures implementing the Tree ADT

Trees 6© 2004 Goodrich, Tamassia

TreesA traversal visits the nodes of a tree in a systematic mannerIn a preorder traversal, a node is visited before its descendants Application: print a structured document

Make Money Fast!

1. Motivations References2. Methods

2.1 StockFraud

2.2 PonziScheme

1.1 Greed 1.2 Avidity2.3 BankRobbery

1

2

3

5

4 6 7 8

9

Algorithm preOrder(v)visit(v)for each child w of v

preorder (w)

Trees 7© 2004 Goodrich, Tamassia

TreesIn a postorder traversal, a node is visited after its descendantsApplication: 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

1Kprograms/

DDR.java10K

Stocks.java25K

h1c.doc3K

h1nc.doc2K

Robot.java20K

9

3

1

7

2 4 5 6

8

Trees 8© 2004 Goodrich, Tamassia

Binary TreesA binary tree is a tree with the following properties:

Each internal node has at most two children (exactly two for proper binary trees)

The children of a node are an ordered pair

We call the children of an internal node left child and right childAlternative 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

Trees 9© 2004 Goodrich, Tamassia

Binary TreesA 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

Trees 10© 2004 Goodrich, Tamassia

Binary Treesnodes are stored in an array

let rank(node) be defined as follows: rank(root) = 1 if node is the left child of parent(node),

rank(node) = 2*rank(parent(node))

if node is the right child of parent(node), rank(node) =

2*rank(parent(node))+1

1

2 3

6 74 5

10 11

A

HG

FE

D

C

B

J

Trees 11© 2004 Goodrich, Tamassia

Binary TreesArithmetic Expression Tree: Binary tree associated with an arithmetic expression

internal nodes: operators external nodes: operands

Example: arithmetic expression tree for the expression (2 (a 1) (3 b))

2

a 1

3 b

Trees 12© 2004 Goodrich, Tamassia

Binary TreesDecision Tree: Binary tree associated with a decision process

internal nodes: questions with yes/no answer external nodes: decisions

Example: dining decision

Want a fast meal?

How about coffee? On expense account?

Starbucks Spike’s Al Forno Café Paragon

Yes No

Yes No Yes No

Trees 13© 2004 Goodrich, Tamassia

Binary TreesNotationn number of nodese number of

external nodesi number of

internal nodesh height

Properties: e i 1 n 2e 1 h i h (n 1)2 e 2h

h log2 e

h log2 (n 1) 1

Trees 14© 2004 Goodrich, Tamassia

Binary Trees

The BinaryTree ADT extends the Tree ADT, i.e., it inherits all the methods of the Tree ADT (e.g., postOrder/ preOrder traversals)Additional methods:

position left(p) position right(p) boolean hasLeft(p) boolean hasRight(p)

Update methods may be defined by data structures implementing the BinaryTree ADT

Trees 15© 2004 Goodrich, Tamassia

Binary TreesIn an inorder traversal a node is visited after its left subtree and before its right subtree

Algorithm inOrder(v)if hasLeft (v)

inOrder (left (v))visit(v)if hasRight (v)

inOrder (right (v))

3

1

2

5

6

7 9

8

4

Trees 16© 2004 Goodrich, Tamassia

Binary TreesPrint Arithmetic Expressions: Application and 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 hasLeft (v)

print(“(’’)inOrder (left(v))

print(v.element ())if hasRight (v)

inOrder (right(v))print (“)’’)

2

a 1

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

Trees 17© 2004 Goodrich, Tamassia

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

v. operatorElement ()

return x y

2

5 1

3 2

Trees 18© 2004 Goodrich, Tamassia

Binary TreesEuler Tour Traversal: Generic traversal of a binary treeIncludes a special cases the preorder, postorder and inorder traversalsWalk 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

Trees 19© 2004 Goodrich, Tamassia

Binary TreesGeneric algorithm that can be specialized by redefining certain stepsImplemented by means of an abstract Java class Visit methods that can be redefined by subclassesTemplate 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

public abstract class EulerTour {protected BinaryTree tree;protected void visitExternal(Position p, Result r) { }protected void visitLeft(Position p, Result r) { }protected void visitBelow(Position p, Result r) { }

protected void visitRight(Position p, Result r) { } protected Object eulerTour(Position p) {

Result r = new Result();if tree.isExternal(p) { visitExternal(p, r); }

else {visitLeft(p, r);r.leftResult = eulerTour(tree.left(p));visitBelow(p, r);r.rightResult = eulerTour(tree.right(p));visitRight(p, r);return r.finalResult;

} …

Trees 20© 2004 Goodrich, Tamassia

Binary TreesWe show how to specialize class EulerTour to evaluate an arithmetic expressionAssumptions

External nodes store Integer objects

Internal nodes store Operator objects supporting methodoperation (Integer, Integer)

public class EvaluateExpressionextends EulerTour {

protected void visitExternal(Position p, Result r) {r.finalResult = (Integer) p.element();

}

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

(Integer) r.leftResult,(Integer) r.rightResult);

}

}

Trees 21© 2004 Goodrich, Tamassia

Binary Search TreesA binary search tree is a binary tree storing keys (or key-value entries) at its internal nodes and satisfying the following property:

Let u, v, and w be three nodes such that u is in the left subtree of v and w is in the right subtree of v. We have key(u) key(v) key(w)

External nodes do not store items

An inorder traversal of a binary search trees visits the keys in increasing order

6

92

41 8

Trees 22© 2004 Goodrich, Tamassia

Binary Search TreesTo search for a key k, we trace a downward path starting at the rootThe next node visited depends on the outcome of the comparison of k with the key of the current nodeIf we reach a leaf, the key is not found and we return nukkExample: find(4):

Call TreeSearch(4,root)

Algorithm TreeSearch(k, v)if T.isExternal (v)

return vif k key(v)

return TreeSearch(k, T.left(v))else if k key(v)

return velse { k key(v) }

return TreeSearch(k, T.right(v))

6

92

41 8

Trees 23© 2004 Goodrich, Tamassia

Binary Search Trees - Insertion

To perform operation inser(k, o), we search for key k (using TreeSearch)Assume k is not already in the tree, and let let w be the leaf reached by the searchWe insert k at node w and expand w into an internal nodeExample: insert 5

6

92

41 8

6

92

41 8

5

w

w

Trees 24© 2004 Goodrich, Tamassia

Binary Search Trees - Deletion

To perform operation remove(k), we search for key kAssume key k is in the tree, and let let v be the node storing kIf node v has a leaf child w, we remove v and w from the tree with operation removeExternal(w), which removes w and its parentExample: remove 4

6

92

41 8

5

vw

6

92

51 8

Trees 25© 2004 Goodrich, Tamassia

Binary Search Trees - Deletion (cont.)

We consider the case where the key k to be removed is stored at a node v whose children are both internal

we find the internal node w that follows v in an inorder traversal

we copy key(w) into node v we remove node w and its

left child z (which must be a leaf) by means of operation removeExternal(z)

Example: remove 3

3

1

8

6 9

5

v

w

z

2

5

1

8

6 9

v

2

Trees 26© 2004 Goodrich, Tamassia

Binary Search Trees -Performance

Consider a dictionary with n items implemented by means of a binary search tree of height h

the space used is O(n) methods find, insert

and remove take O(h) time

The height h is O(n) in the worst case and O(log n) in the best case