Beruflich Dokumente
Kultur Dokumente
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
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)
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
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
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/
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
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:
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
3 b
Decision Tree
Binary tree associated with a decision process
internal nodes: questions with yes/no answer leaves: decisions
Properties:
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
2 1 3 4 5 Trees 7
8 9
16
17
Trees
18
2 a -
1 3
b ((2 (a - 1)) + (3 b)) Trees
19
+
2 5 -
1 Trees
20
3 2
(operators can be used more than once, but each internal node stores only one) The value of the root is 21
Trees
21
+
L
R
B
-
3 1
22
2 5 Trees
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
B A D F
B A C D E F
C Trees E
25
B A D E Trees C D E
26
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)
A w B Trees C
27