Documente Academic
Documente Profesional
Documente Cultură
Stoc k Frau d
Ponzi Schem e
Bank Robber y
Chapter 7: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
Data structures for trees (7.1.4 and 7.3.4) C++ implementation (7.1.3 and 7.3.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
ComputersRU s Sale s U S Internationa l Asi a Manufacturin g Laptop s Canad a Desktop s R& D
Europ e
Trees
Tree Terminology
Root: node without parent (A) Subtree: tree consisting of 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, grandparent, great-grandparent, etc. C 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 J K 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)
Update methods:
swapElements(p, q) object replaceElement(p, o)
Accessor methods:
position root() position parent(p) positionIterator children(p)
Additional update methods may be defined by data structures implementing the Tree ADT
Trees
B A D F
B A C D E F
C Trees E
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
Make Money Fast!
l A o i h r O d v i v s o f a h c i d w pd r O e w )
5 4 6
2.1 Stock Fraud
2. Methods
7
2.2 Ponzi Scheme
1.2 Avidity
Trees
l A o i h r O d v i v s o f a h c i d w ) w ( d O e r p t v
I J K
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
cs16 /
l A o i h t r e ( ) o f a h c i d w ) w ( e d r O t s o p i v s
homeworks /
7 2 4
DDR.jav a 10K
8
programs / todo.tx t 1K
1
h1c.do c 3K
5
Stocks.jav a 25K
6
Robot.jav a 20K
10
h1nc.do c 2K
Trees
l A o i h t r e ( o f a h c i d w ) w ( e d r O t s o p i v s t v
I J K
Trees
11
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
12
Trees
3 b
Decision Tree
Binary tree associated with a decision process
internal nodes: questions with yes/no answer leaves: decisions
Trees
15
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)
16
Update methods may be defined by data structures implementing the BinaryTree ADT
Trees
B A D E Trees C D E
17
B A C
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
l A o i h n r e ( ) f i n i r e ( t h l ) i v s f i n i r e ( h C d v t v s n e l v s n e l v
2 1 3 4 5 Trees 7
8 9
18
l A o i h n r e ( ) f i n i r e ( t h l ) i v s f i n i r e ( h C d v Trees
19
s n e l v t v s n e l v
Trees
20
A o m h t i p r g s i e t n I p n ( i ) p n r x E e f i s C r p n e . v ( i f i e t n I i r p s e ( l C t h ) g ) ( t n i r p n
r i t x n v s l v t t i n l d v ) t e ) s l v t x ( )
+ 2 a 1 Trees 3 b
+ 2 5 1 Trees
22
3 2
Trees
23
+
L
R
B
3 1
24
2 5 Trees
( o h u T ) s n e l p
l i e , u
s n e l p + R
B
3 1 2
25
2 5
Trees
r i t x n T p i n r e t x E h p e u l a v t d s l E r p i i r p s e , T ( ) t f l . e i r P o h t a d s i r p s e , T ( ) t h g . r p i E f i n a n d t x t t x i
+ 2 a 1 Trees 3
m h t i r o g l A d n E
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); } // Trees other details omitted };
28