Sie sind auf Seite 1von 27

Make Money Fast!

Stock Fraud

Ponzi Scheme

Bank Robbery

Chapter 6:Trees
Nancy Amato
Parasol Lab, Dept. CSE, Texas A&M University
Acknowledgement: These slides are adapted from slides provided with Data Structures and Algorithms in C++, Goodrich, Tamassia and Mount (Wiley 2004)

http://parasol.tamu.edu

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
US ComputersRUs

Sales

Manufacturing

R&D

International

Laptops

Desktops

Europe

Asia

Canada

Trees

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 grandparent, great-grandparent, etc. B 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 K J grandchild, great-grandchild, etc.
Trees
4

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

Trees

Tree ADT
We use positions to abstract nodes Generic methods:
integer size() boolean isEmpty() objectIterator elements() positionIterator positions()

Query methods:

boolean isInternal(p) boolean isLeaf (p) boolean isRoot(p) swapElements(p, q) object replaceElement(p, o)

Update methods:

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

Additional update methods

may be defined by data structures implementing the Tree ADT

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 1 2
1. Motivations

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

Make Money Fast!

5
2. Methods

9
References

3
1.1 Greed

4
1.2 Avidity

6
2.1 Stock Fraud

7
2.2 Ponzi Scheme

8
2.3 Bank Robbery
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.
A

Algorithm preOrder(v)! visit(v)! for each child w of v! !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 3
homeworks/

Algorithm postOrder(v)! for each child w of v! !postOrder(w)! visit(v)!

cs16/

7
programs/

8
todo.txt 1K

1
h1c.doc 3K

2
h1nc.doc 2K

4
DDR.java 10K

5
Stocks.java 25K

6
Robot.java 20K
9

Trees

Exercise: Postorder Traversal


In a postorder traversal, a node
is visited after its descendants List the nodes of this tree in postorder traversal order.
B A

Algorithm postOrder(v)! for each child w of v! postOrder(w)! visit(v)!

Trees

10

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

Applications:

arithmetic expressions decision processes searching


A

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
D

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


3 b

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? Yes How about coffee? Yes Starbucks No Spikes Trees No On expense account? Yes 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:

l=i+1 n = 2l - 1 hi 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:
position leftChild(p) position rightChild(p) position sibling(p)
15

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

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 6

Algorithm inOrder(v)! if isInternal(v)! inOrder(leftChild(v))! visit(v)! if isInternal(v)! inOrder(rightChild(v)) !

2 1 3 4 5 Trees 7

8 9

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.
E A

Algorithm inOrder(v)! if isInternal(v)! inOrder(leftChild(v))! visit(v)! if isInternal(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


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


2 a -
1 3


b ((2 (a - 1)) + (3 b)) 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 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 Trees
20


3 2

Exercise: Arithmetic Expressions


Draw an expression tree that has Four leaves, storing the values 1, 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)

+

L


R
B


-
3 1
22

2 5 Trees

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

B A D F

Node objects implement the Position ADT

B A C D E F

C Trees E

25

Data Structure for Binary Trees


A node is represented by an object storing
Element Parent node Left child node Right child node

B A D E Trees C D E
26

Node objects implement the Position ADT

B A C

C++ Implementation
Tree interface BinaryTree interface extending Tree Classes implementing Tree and BinaryTree and providing
Constructors Update methods Print methods expandExternal(v)

v A

v A

removeAboveExternal(w)

Examples of updates for binary trees


expandExternal(v) removeAboveExternal(w)

A w B Trees C

27

Das könnte Ihnen auch gefallen