CSC212 Data Structure - Section FG Lecture 15 Trees and Tree Traversals Instructor: Prof. Zhigang Zhu Department of Computer Science City College of New.

Slides:



Advertisements
Similar presentations
Chapter 5 introduces the often- used data structure of linked lists. This presentation shows how to implement the most common operations on linked lists.
Advertisements

CSC211 Data Structures Lecture 9 Linked Lists Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College.
Chapter 12 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common approach to the.
Chapter 8 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences of a problem.
Container Classes A container class is a data type that is capable of holding a collection of items. In C++, container classes can be implemented as.
L l One of the tree applications in Chapter 9 is binary search trees. l l In Chapter 9, binary search trees are used to implement bags and sets. l l This.
 One of the tree applications in Chapter 10 is binary search trees.  In Chapter 10, binary search trees are used to implement bags and sets.  This presentation.
CSC212 Data Structure Lecture 14 Binary Search Trees Instructor: Prof. George Wolberg Department of Computer Science City College of New York.
 Chapter 11 has several programming projects, including a project that uses heaps.  This presentation shows you what a heap is, and demonstrates two.
Binary Trees Chapter 6. Linked Lists Suck By now you realize that the title to this slide is true… By now you realize that the title to this slide is.
CSC212 Data Structure - Section AB Lecture 20 Hashing Instructor: Edgardo Molina Department of Computer Science City College of New York.
Introduction This chapter explores graphs and their applications in computer science This chapter explores graphs and their applications in computer science.
 Chapter 7 introduces the stack data type.  Several example applications of stacks are given in that chapter.  This presentation shows another use called.
  Chapter 12 presents several common algorithms for sorting an array of integers.   Two slow but simple algorithms are Selectionsort and Insertionsort.
P p Chapter 10 has several programming projects, including a project that uses heaps. p p This presentation shows you what a heap is, and demonstrates.
Trees II Kruse and Ryba Ch 10.1,10.2,10.4 and 11.3.
CSC212 Data Structure - Section FG Lecture 21 Quadratic Sorting Instructor: Zhigang Zhu Department of Computer Science City College of New York.
 Chapter 10 introduces trees.  This presentation illustrates the simplest kind of trees: Complete Binary Trees. Complete Binary Trees Data Structures.
CSC212 Data Structure - Section FG Lecture 9 Linked Lists Instructor: Zhigang Zhu Department of Computer Science City College of New York.
trees1 Binary Trees trees2 Basic terminology nodesFinite set of nodes (may be empty -- 0 nodes), which contain data rootFirst node in tree is called.
CS 206 Introduction to Computer Science II 09 / 22 / 2008 Instructor: Michael Eckmann.
L l Chapter 11 discusses several ways of storing information in an array, and later searching for the information. l l Hash tables are a common approach.
 An important topic: preconditions and postconditions.  They are a method of specifying what a function accomplishes. Preconditions and Postconditions.
L l Chapter 4 introduces the often- used linked list data structures l l This presentation shows how to implement the most common operations on linked.
 Chapter 9 introduces the technique of recursive programming.  As you have seen, recursive programming involves spotting smaller occurrences of a problem.
Razdan CST230http://dcst2.east.asu.edu/~razdan/cst230/ Razdan with contribution from others 1 Chapter 9 Trees Anshuman Razdan Div of Computing Studies.
CS 206 Introduction to Computer Science II 02 / 11 / 2009 Instructor: Michael Eckmann.
CSC212 Data Structure - Section FG Lecture 12 Stacks and Queues Instructor: Zhigang Zhu Department of Computer Science City College of New York.
Trees Main and Savitch Chapter 10. Binary Trees A binary tree has nodes, similar to nodes in a linked list structure. Data of one sort or another may.
 Chapter 8 introduces the queue data type.  Several example applications of queues are given in that chapter.  This presentation describes the queue.
1 Foundations of Software Design Fall 2002 Marti Hearst Lecture 17: Binary Search Trees; Heaps.
TREES A tree's a tree. How many more do you need to look at? --Ronald Reagan.
P An important topic: preconditions and postconditions. p They are a method of specifying what a function accomplishes. Preconditions and Postconditions.
 A Collection class is a data type that is capable of holding a group of items.  In Java, Collection classes can be implemented as a class, along with.
P An important topic: preconditions and postconditions. p They are a method of specifying what a function accomplishes. Illinois State University Department.
CSC211 Data Structures Lecture 20 Hashing Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College.
 An important topic: preconditions and postconditions.  They are a method of specifying what a method accomplishes. Preconditions and Postconditions.
CSC211 Data Structures Lecture 21 Quadratic Sorting Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College.
CSC211 Data Structures Lecture 18 Heaps and Priority Queues Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College.
P p Chapter 10 introduces trees. p p This presentation illustrates the simplest kind of trees: Complete Binary Trees. Complete Binary Trees Data Structures.
Container Classes  A container class is a data type that is capable of holding a collection of items.  In C++, container classes can be implemented as.
CS 206 Introduction to Computer Science II 10 / 02 / 2009 Instructor: Michael Eckmann.
CSC212 Data Structure - Section AB Lecture 13 Recursive Thinking Instructor: Edgardo Molina Department of Computer Science City College of New York.
CSC212 Data Structure Lecture 16 Heaps and Priority Queues Instructor: George Wolberg Department of Computer Science City College of New York.
Rooted Tree a b d ef i j g h c k root parent node (self) child descendent leaf (no children) e, i, k, g, h are leaves internal node (not a leaf) sibling.
TREES K. Birman’s and G. Bebis’s Slides. Tree Overview 2  Tree: recursive data structure (similar to list)  Each cell may have zero or more successors.
Trees Chapter 10. CS 308 2Chapter Trees Preview: Preview: The data organizations presented in previous chapters are linear, in that items are one.
Xiaoyan Li CSC211 Data Structures Lecture 2 ADT and C++ Classes (I) Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College.
Zhigang Zhu, CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.
(c) University of Washington20-1 CSC 143 Java Trees.
Linked Lists in Action Chapter 5 introduces the often-used data public classure of linked lists. This presentation shows how to implement the most common.
CSC212 Data Structure - Section AB
Complete Binary Trees Chapter 10 introduces trees.
Trees and Tree Traversals
Data Structures and Algorithms for Information Processing
Quadratic Sorting Chapter 12 presents several common algorithms for sorting an array of integers. Two slow but simple algorithms are Selectionsort and.
CSC212 Data Structure - Section AB
Heaps Chapter 10 has several programming projects, including a project that uses heaps. This presentation shows you what a heap is, and demonstrates two.
Heaps Chapter 10 has several programming projects, including a project that uses heaps. This presentation shows you what a heap is, and demonstrates two.
Binary Search Trees One of the tree applications in Chapter 9 is binary search trees. In Chapter 9, binary search trees are used to implement bags and.
Heaps Chapter 11 has several programming projects, including a project that uses heaps. This presentation shows you what a heap is, and demonstrates.
Hash Tables Chapter 12 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common.
Binary Search Trees One of the tree applications in Chapter 9 is binary search trees. In Chapter 9, binary search trees are used to implement bags and.
Using a Queue Chapter 8 introduces the queue data type.
Linked Lists in Action Chapter 5 introduces the often- used data structure of linked lists. This presentation shows how to implement the most common.
Using a Queue Chapter 8 introduces the queue data type.
Heaps Chapter 10 has several programming projects, including a project that uses heaps. This presentation shows you what a heap is, and demonstrates two.
Complete Binary Trees Chapter 9 introduces trees.
Presentation transcript:

CSC212 Data Structure - Section FG Lecture 15 Trees and Tree Traversals Instructor: Prof. Zhigang Zhu Department of Computer Science City College of New York

Motivation p Linear structures p arrays p dynamic arrays p linked lists p Nonlinear Structures p trees - Hierarchical Structures p Graphs p Why???

Application: Mailing Addresses Zhigang Zhu, CS Dept, CCNY, New York, NY 10031, USA 6 billion = 6,000,000,000 people in the world What kind of structure is the best for a postman to locate me? Array ? Linked list ? Tree ?

A Tree for all the mailing addresses China Earth USA... Korea NY... NYC MA... CCNY Z. Zhu Albany... CS

p p Chapter 10 introduces trees. p p This presentation illustrates basic terminology for binary trees p p and focuses on p p Complete Binary Trees: the simplest kind of trees p p Binary Tree Traversals: any kind of binary trees Trees and Binary Trees Data Structures and Other Objects Using C++

Binary Trees p p A binary tree has nodes, similar to nodes in a linked list structure. p p Data of one sort or another may be stored at each node. p p But it is the connections between the nodes which characterize a binary tree.

Binary Trees p p A binary tree has nodes, similar to nodes in a linked list structure. p p Data of one sort or another may be stored at each node. p p But it is the connections between the nodes which characterize a binary tree. An example can illustrate how the connections work An example can illustrate how the connections work

A Binary Tree of States In this example, the data contained at each node is one of the 50 states. Washington Colorado Oklahoma Arkansas Mass. Florida New Hampshire Arizona Nebraska

A Binary Tree of States Each tree has a special node called its root, usually drawn at the top.

A Binary Tree of States Each tree has a special node called its root, usually drawn at the top. The example tree has Washington as its root. The example tree has Washington as its root.

A Binary Tree of States Each node is permitted to have two links to other nodes, called the left child and the right child.

A Binary Tree of States Each node is permitted to have two links to other nodes, called the left child and the right child.

A Binary Tree of States Children are usually drawn below a node. The right child of Washington is Colorado. The right child of Washington is Colorado. The left child of Washington is Arkansas. The left child of Washington is Arkansas.

A Binary Tree of States Some nodes have only one child. Arkansas has a left child, but no right child. Arkansas has a left child, but no right child.

A Quiz Some nodes have only one child. Which node has only a right child? Which node has only a right child?

A Quiz Some nodes have only one child. Florida has only a right child. Florida has only a right child.

A Binary Tree of States A node with no children is called a leaf.

A Binary Tree of States Each node is called the parent of its children. Washington is the parent of Arkansas and Colorado. Washington is the parent of Arkansas and Colorado.

A Binary Tree of States Two rules about parents: ¶The root has no parent. ·Every other node has exactly one parent.

A Binary Tree of States Two nodes with the same parent are called siblings. Arkansas and Colorado are siblings. Arkansas and Colorado are siblings.

Complete Binary Trees A complete binary tree is a special kind of binary tree which will be useful to us.

Complete Binary Trees A complete binary tree is a special kind of binary tree which will be useful to us. When a complete binary tree is built, its first node must be the root. When a complete binary tree is built, its first node must be the root.

Complete Binary Trees The second node of a complete binary tree is always the left child of the root...

Complete Binary Trees The second node of a complete binary tree is always the left child of the root and the third node is always the right child of the root.

Complete Binary Trees The next nodes must always fill the next level from left to right.

Complete Binary Trees The next nodes must always fill the next level from left to right.

Complete Binary Trees The next nodes must always fill the next level from left to right.

Complete Binary Trees The next nodes must always fill the next level from left to right.

Complete Binary Trees The next nodes must always fill the next level from left to right.

Complete Binary Trees The next nodes must always fill the next level from left to right.

Is This Complete?

Yes! 4 4It is called the empty tree, and it has no nodes, not even a root.

Full Binary Trees A full binary tree is a special kind of complete binary tree When a full binary tree is built, its first node must be the root. When a full binary tree is built, its first node must be the root. FULL

Full Binary Trees The second node of a full binary tree is always the left child of the root... not FULL yet

Full Binary Trees The second node of a full binary tree is always the left child of the root and you MUST have the third node which always the right child of the root. FULL

Full Binary Trees The next nodes must always fill the next level from left to right. not FULL yet

Full Binary Trees The next nodes must always fill the next level from left to right. not FULL yet

Full Binary Trees The next nodes must always fill the next level from left to right. not FULL yet

Full Binary Trees The next nodes must always fill the next level from left to right...until every leaf has the same depth (2) FULL!

Full Binary Trees The next nodes must always fill the next level from left to right.

Full Binary Trees The next nodes must always fill the next level from left to right.

Is This Full?

Yes! 4 4It is called the empty tree, and it has no nodes, not even a root.

Implementing a Complete Binary Tree p p We will store the date from the nodes in a partially-filled array. An array of data We don't care what's in this part of the array. An integer to keep track of how many nodes are in the tree 3

Implementing a Complete Binary Tree Using an Array p p We will store the date from the nodes in a partially-filled array. An array of data We don't care what's in this part of the array. An integer to keep track of how many nodes are in the tree 3 Read Section 10.2 to see details of how the entries are stored. Read Section 10.2 to see details of how the entries are stored.

Implementing a Complete Binary Tree Using an Array p Root is at component [0] p Parent of node in [i] is at [(i-1)/2) p Children (if exist) of node [i] is at [2i+1] and [2i+2] p Total node number p …+2 d-1 +r, r <= 2 d, d is the depth

p p Binary trees contain nodes. p p Each node may have a left child and a right child. p p If you start from any node and move upward, you will eventually reach the root. p p Every node except the root has one parent. The root has no parent. p p Complete binary trees require the nodes to fill in each level from left-to-right before starting the next level. Binary Tree Summary

A binary tree is a structure in which: Each node can have at most two children, and in which a unique path exists from the root to every other node. Each node can have at most two children, and in which a unique path exists from the root to every other node. The two children of a node are called the left child and the right child, if they exist. Binary Tree Basics

A Binary Tree Exercise Q V T K S A E L

How many leaf nodes? Q V T K S A E L

How many descendants of Q? Q V T K S A E L

How many ancestors of K? Q V T K S A E L Question: How to implement a general binary tree ?

Implementing a Binary Tree with a Class for Nodes Q V T K S A E L Root

Binary Tree Nodes p Each node of a binary tree is stored in an object of a new binary_tree_node class that we are going to define p Each node contains data as well as pointers to its children (nodes) p An entire tree is represented as a pointer to the root node

binary_tree_node Class p variables p functions template class binary_tree_node { public: private: Item data_field; binary_tree_node *left_field; binary_tree_node *right_field; }; bintree //retrievals data left right //set set_data set_left set_right //boolean is_leaf

Creating and Manipulating Trees p Consider only two functions p Clearing a tree p Return nodes of a tree to the heap p Copying a tree p The Implementation is easier than it seems p if we use recursive thinking

Clearing a Tree Q V T K S A E L Root

Clearing a Tree Q V T K S A E L Root Clear LEFT SUBTREE

Clearing a Tree V S A L Root Clear RIGHT SUBTREE

Clearing a Tree V Root Return root node to the heap

Clearing a Tree NULL Root Set the root pointer to NULL

Clear a Tree p key: recursive thinking template void tree_clear(binary_tree_node *& root_ptr) // Library facilities used: cstdlib { if (root_ptr != NULL) { tree_clear( root_ptr->left( ) ); // clear left sub_tree tree_clear( root_ptr->right( ) ); // clear right sub_tree delete root_ptr; // return root node to the heap root_ptr = NULL; // set root pointer to the null } bintree

Copy a Tree p Can you implement the copy? (p 467) template binary_tree_node * tree_copy(const binary_tree_node * root_ptr) // Library facilities used: cstdlib { binary_tree_node *l_ptr; binary_tree_node *r_ptr; if (root_ptr == NULL) return NULL; else { l_ptr = tree_copy( root_ptr->left( ) ); // copy the left sub_tree r_ptr = tree_copy( root_ptr->right( ) ); // copy the right sub_tree return new binary_tree_node ( root_ptr->data( ), l_ptr, r_ptr); } // copy the root node and set the the root pointer } bintree

Binary Tree Traversals p pre-order traversal p root (left sub_tree) (right sub_tree) p in-order traversal p (left sub_tree) root (right sub_tree) p post-order traversal p (left sub_tree) (right sub_tree) root p backward in-order traversal p (right sub_tree) root (left sub_tree) bintree

Preorder Traversal: J E A H T M Y ‘J’ ‘E’ ‘A’ ‘H’ ‘T’ ‘M’‘Y’ tree Print left subtree secondPrint right subtree last Print first

Preorder Traversal p Example: print the contents of each node template void preorder_print(const binary_tree_node * node_ptr) // Library facilities used: cstdlib, iostream { if (node_ptr != NULL) { std::cout data( ) << std::endl; preorder_print(node_ptr->left( )); preorder_print(node_ptr->right( )); }

Inorder Traversal: A E H J M T Y ‘J’ ‘E’ ‘A’ ‘H’ ‘T’ ‘M’‘Y’ tree Print left subtree firstPrint right subtree last Print second

Inorder Traversal p Example: print the contents of each node template void inorder_print(const binary_tree_node * node_ptr) // Library facilities used: cstdlib, iostream { if (node_ptr != NULL) { inorder_print(node_ptr->left( )); std::cout data( ) << std::endl; inorder_print(node_ptr->right( )); }

‘J’ ‘E’ ‘A’ ‘H’ ‘T’ ‘M’‘Y’ tree Print left subtree firstPrint right subtree second Print last Postorder Traversal: A H E M Y T J

Postorder Traversal p Example: print the contents of each node template void postorder_print(const binary_tree_node * node_ptr) // Library facilities used: cstdlib, iostream { if (node_ptr != NULL) { postorder_print(node_ptr->left( )); postorder_print(node_ptr->right( )); std::cout data( ) << std::endl; }

Backward Inorder Traversal: Y T M J H E A ‘J’ ‘E’ ‘A’ ‘H’ ‘T’ ‘M’‘Y’ tree Print right subtree firstPrint left subtree last Print second

Backward Inorder Traversal: Y T M J H E A ‘J’ ‘E’ ‘A’ ‘H’ ‘T’ ‘M’ ‘Y’ tree Print right subtree first Print left subtree last Print second

A Useful Backward Inorder Traversal p Intent each number according its depth template void print(binary_tree_node * node_ptr, SizeType depth) // Library facilities used: iomanip, iostream, stdlib { if (node_ptr != NULL) { print(node_ptr->right( ), depth+1); std::cout << std::setw(4*depth) << ""; // Indent 4*depth spaces. std::cout data( ) << std::endl; print(node_ptr->left( ), depth+1); } bintree

A Challenging Question: p For the traversals we have seen, the “processing” was simply printing the values of the node p But we’d like to do any kind of processing p We can replace “cout” with some other form of “processing” p But how about 1000 kinds? p Can template be helpful? p Solution::::::::> (pages 501 – 507)

A parameter can be a function p write one function capable of doing anything p A parameter to a function may be a function. Such a parameter is declared by p the name of the function’s return type (or void), p then the name of the parameter (i.e. the function), p and finally a pair of parentheses (). p Inside () is a list of parameter types of that parameter function p Example p int sum ( void f (int&, double), int i,...);

Preorder Traversal – print only p Example: print the contents of each node template void preorder_print(const binary_tree_node * node_ptr) // Library facilities used: cstdlib, iostream { if (node_ptr != NULL) { std::cout data( ) << std::endl; preorder_print(node_ptr->left( )); preorder_print(node_ptr->right( )); }

Preorder Traversal – general form p A template function for tree traversals template void preorder(void f(Item&), binary_tree_node * node_ptr) // Library facilities used: cstdlib { if (node_ptr != NULL) { f( node_ptr->data( ) ); // node_ptr->data() return reference ! preorder(f, node_ptr->left( )); preorder(f, node_ptr->right( )); }

Preorder Traversal – how to use p Define a real function before calling void printout(int & it) // Library facilities used: iostream { std::cout << it << std::endl; } Can you print out all the node of a tree pointed by root ? binary_tree_node *root;.... preorder(printout, root); Yes!!!

Preorder Traversal – another functions p Can define other functions... void assign_default(int& it) // Library facilities used: iostream { it = 0; } // unfortunately template does not work here for function parameters You can assign a default value to all the node of a tree pointed by root: binary_tree_node *root;.... preorder(assign_default, root);

Preorder Traversal – how to use p Can the function-arguments be template? template void printout(Item& it) // Library facilities used: iostream { std::cout << it << std::endl; } Can you print out all the node of a tree pointed by root ? binary_tree_node *root;.... preorder(print_out, root); X ! print_out should have real types

Preorder Traversal – how to use p The function-arguments may be template if... template void printout(Item& it) // Library facilities used: iostream { std::cout << it << std::endl; } Can you print out all the node of a tree pointed by root ? binary_tree_node *root;.... preorder(print_out, root); But you may do the instantiation like this

Preorder Traversal – a more general form p An extremely general implementation (p 505) template void preorder(Process f, BTNode* node_ptr) // Note: BTNode may be a binary_tree_node or a const binary tree node. // Process is the type of a function f that may be called with a single // Item argument (using the Item type from the node), // as determined by the actual f in the following. // Library facilities used: cstdlib { if (node_ptr != NULL) { f( node_ptr->data( ) ); preorder(f, node_ptr->left( )); preorder(f, node_ptr->right( )); } bintree

Functions as Parameters p We can define a template function X with functions as parameters – which are called function parameters p A function parameter can be simply written as Process f ( where Process is a template), and the forms and number of parameters for f are determined by the actual call of f inside the template function X p The real function argument for f when calling the the template function X cannot be a template function, it must be instantiated in advance or right in the function call

Summary p Tree, Binary Tree, Complete Binary Tree p child, parent, sibling, root, leaf, ancestor,... p Array Representation for Complete Binary Tree p Difficult if not complete binary tree p A Class of binary_tree_node p each node with two link fields p Tree Traversals p recursive thinking makes things much easier p A general Tree Traversal p A Function as a parameter of another function

T HE E ND Presentation copyright 1997 Addison Wesley Longman, For use with Data Structures and Other Objects Using C++ by Michael Main and Walter Savitch. Some artwork in the presentation is used with permission from Presentation Task Force (copyright New Vision Technologies Inc) and Corel Gallery Clipart Catalog (copyright Corel Corporation, 3G Graphics Inc, Archive Arts, Cartesia Software, Image Club Graphics Inc, One Mile Up Inc, TechPool Studios, Totem Graphics Inc). Students and instructors who use Data Structures and Other Objects Using C++ are welcome to use this presentation however they see fit, so long as this copyright notice remains intact. Copyright from slide 2 – slide 49: