Outline. Preliminaries. Binary Trees Binary Search Trees. What is Tree? Implementation of Trees using C++ Tree traversals and applications

Similar documents
Binary Trees. Examples:

Trees. Trees. CSE 2011 Winter 2007

Trees. (Trees) Data Structures and Programming Spring / 28

Binary Trees, Binary Search Trees

4. Trees. 4.1 Preliminaries. 4.2 Binary trees. 4.3 Binary search trees. 4.4 AVL trees. 4.5 Splay trees. 4.6 B-trees. 4. Trees

Data Structures. Trees, Binary trees & Binary Search Trees

Trees, Binary Trees, and Binary Search Trees

Lec 17 April 8. Topics: binary Trees expression trees. (Chapter 5 of text)

Trees, Part 1: Unbalanced Trees

CSCI2100B Data Structures Trees

Trees. 9/21/2007 8:11 AM Trees 1

OUTLINE. General Trees (Ch. 7.1) Binary Trees (Ch. 7.3) Tree Traversals (Ch. 7.2)

Trees. Make Money Fast! Stock Fraud. Bank Robbery. Ponzi Scheme. Trees Goodrich, Tamassia

CISC 235 Topic 3. General Trees, Binary Trees, Binary Search Trees

Why Do We Need Trees?

9/29/2016. Chapter 4 Trees. Introduction. Terminology. Terminology. Terminology. Terminology

Trees. Make Money Fast! Bank Robbery. Ponzi Scheme. Stock Fraud Goodrich, Tamassia, Goldwasser Trees

CE 221 Data Structures and Algorithms

Trees. Make Money Fast! Bank Robbery. Ponzi Scheme. Stock Fraud. 02/06/2006 Trees 1

Trees. Make Money Fast! Bank Robbery. Stock Fraud. Ponzi Scheme Goodrich, Tamassia. Trees 1

Introduction. for large input, even access time may be prohibitive we need data structures that exhibit times closer to O(log N) binary search tree

Tree: non-recursive definition. Trees, Binary Search Trees, and Heaps. Tree: recursive definition. Tree: example.

BBM 201 Data structures

A set of nodes (or vertices) with a single starting point

! Tree: set of nodes and directed edges. ! Parent: source node of directed edge. ! Child: terminal node of directed edge

Binary Trees. Height 1

Trees and Binary Trees

Trees. Make Money Fast! Bank Robbery. Ponzi Scheme. Stock Fraud. 1/18/2005 4:17 AM Trees 1

Data Structures and Algorithms. Trees

! Tree: set of nodes and directed edges. ! Parent: source node of directed edge. ! Child: terminal node of directed edge

Trees. Introduction & Terminology. February 05, 2018 Cinda Heeren / Geoffrey Tien 1

Trees. Make Money Fast! Bank Robbery. Stock Fraud. Ponzi Scheme. Trees Goodrich, Tamassia

CMSC 341. Binary Search Trees CMSC 341 BST

Chapter 20: Binary Trees

Unit 1 (9Hrs) Trees. Mahesh Sanghavi & Deepali Pawar Department of Computer Engineering, SNJB s KBJ College of Engineering, Chandwad, India

CMSC 341 Lecture 10 Binary Search Trees

Cpt S 122 Data Structures. Data Structures Trees

Stock Fraud. Nancy Amato. Parasol Lab, Dept. CSE, Texas A&M University

Trees 3/19/14. Mammal. Dog Pig Cat

Elementary Data Structures. Stacks, Queues, & Lists Amortized analysis Trees

TREES. Trees - Introduction

Binary Trees

Outline. Definitions Traversing trees Binary trees

Algorithms. AVL Tree

Programming II (CS300)

Tree Structures. Definitions: o A tree is a connected acyclic graph. o A disconnected acyclic graph is called a forest

Trees. A tree is a directed graph with the property

Uses for Trees About Trees Binary Trees. Trees. Seth Long. January 31, 2010

COMP : Trees. COMP20012 Trees 219

[ DATA STRUCTURES ] Fig. (1) : A Tree

Binary Search Trees. See Section 11.1 of the text.

DATA STRUCTURES AND ALGORITHMS. Hierarchical data structures: AVL tree, Bayer tree, Heap

Chapter 11.!!!!Trees! 2011 Pearson Addison-Wesley. All rights reserved 11 A-1

Chapter 11.!!!!Trees! 2011 Pearson Addison-Wesley. All rights reserved 11 A-1

Trees. Data structures and Algorithms. Make Money Fast! Bank Robbery. Stock Fraud. Ponzi Scheme

Binary Tree. Preview. Binary Tree. Binary Tree. Binary Search Tree 10/2/2017. Binary Tree

Binary Trees and Binary Search Trees

Data Structures Lecture 6

Discussion 2C Notes (Week 8, February 25) TA: Brian Choi Section Webpage:

CSC148 Week 6. Larry Zhang

BINARY SEARCH TREES cs2420 Introduction to Algorithms and Data Structures Spring 2015

Analysis of Algorithms

CMPT 225. Binary Search Trees

Trees : Part 1. Section 4.1. Theory and Terminology. A Tree? A Tree? Theory and Terminology. Theory and Terminology

8. Binary Search Tree

Tree. A path is a connected sequence of edges. A tree topology is acyclic there is no loop.

Announcements. Midterm exam 2, Thursday, May 18. Today s topic: Binary trees (Ch. 8) Next topic: Priority queues and heaps. Break around 11:45am

Module 4: Index Structures Lecture 13: Index structure. The Lecture Contains: Index structure. Binary search tree (BST) B-tree. B+-tree.

In a postorder traversal, a node is visited after its descendants Application: compute space used by files in a directory and its subdirectories 9 1

Lecture 6: Analysis of Algorithms (CS )

INF2220: algorithms and data structures Series 1

Hierarchical data structures. Announcements. Motivation for trees. Tree overview

Lecture Notes 16 - Trees CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson

I2206 Data Structures TS 6: Binary Trees - Binary Search Trees

Garbage Collection: recycling unused memory

Trees 11/15/16. Chapter 11. Terminology. Terminology. Terminology. Terminology. Terminology

Trees. Truong Tuan Anh CSE-HCMUT

Unit III - Tree TREES

Data Structures. Trees. By Dr. Mohammad Ali H. Eljinini. M.A. Eljinini, PhD

Binary Search Trees 1

Data Structure Lecture#10: Binary Trees (Chapter 5) U Kang Seoul National University

Trees. R. J. Renka 10/14/2011. Department of Computer Science & Engineering University of North Texas. R. J. Renka Trees

CS302 - Data Structures using C++

Trees. CptS 223 Advanced Data Structures. Larry Holder School of Electrical Engineering and Computer Science Washington State University

Advanced Set Representation Methods

Binary Search Trees Treesort

March 20/2003 Jayakanth Srinivasan,

(b) int count = 0; int i = 1; while (i<m) { for (int j=i; j<n; j++) { count = count + 1; i = i + 1; O(M + N 2 ) (c) int count = 0; int i,j,k; for (i=1

Binary Trees. BSTs. For example: Jargon: Data Structures & Algorithms. root node. level: internal node. edge.

Data Structures and Algorithms for Engineers

CS 261 Data Structures. AVL Trees

Algorithms and Data Structures

Binary Tree. Binary tree terminology. Binary tree terminology Definition and Applications of Binary Trees

Data Structures in Java

Bioinformatics Programming. EE, NCKU Tien-Hao Chang (Darby Chang)

Terminology. The ADT Binary Tree. The ADT Binary Search Tree

Course Review for. Cpt S 223 Fall Cpt S 223. School of EECS, WSU

CS 350 : Data Structures Binary Search Trees

Trees. Dr. Ronaldo Menezes Hugo Serrano Ronaldo Menezes, Florida Tech

Trees. Estruturas de Dados / Programação 2 Árvores. Márcio Ribeiro twitter.com/marciomribeiro. Introduc)on. Hierarchical structure

Transcription:

Trees 1

Outline Preliminaries What is Tree? Implementation of Trees using C++ Tree traversals and applications Binary Trees Binary Search Trees Structure and operations Analysis 2

What is a Tree? A tree is a collection of nodes with the following properties: The collection can be empty. Otherwise, a tree consists of a distinguished node r, called root, and zero or more nonempty sub-trees T 1, T 2,, T k, each of whose roots are connected by a directed edge from r. The root of each sub-tree is said to be child of r, and r is the parent of each sub-tree root. If a tree is a collection of N nodes, then it has N-1 edges. root... T 1 T 2 T k 3

A Preliminaries B C D E F G H I J K L M N P Q Node A has 6 children: B, C, D, E, F, G. B, C, H, I, P, Q, K, L, M, N are leaves in the tree above. K, L, M are siblings since F is parent of all of them. 4

Preliminaries (continued) A path from node n 1 to n k is defined as a sequence of nodes n 1, n 2,, n k such that n i is parent of n i+1 (1 i < k) The length of a path is the number of edges on that path. There is a path of length zero from every node to itself. There is exactly one path from the root to each node. The depth of node n i is the length of the path from root to node n i The height of node n i is the length of longest path from node n i to a leaf. If there is a path from n 1 to n 2, then n 1 is ancestor of n 2, and n 2 is descendent of n 1. If n 1 n 2 then n 1 is proper ancestor of n 2, and n 2 is proper descendent of n 1. 5

Figure 1 A tree, with height and depth information 6

Implementation of Trees struct TreeNode { Object element; struct TreeNode *firstchild; struct TreeNode *nextsibling; }; B NULL A NULL element firstchild nextsibling C NULL D A H NULL NULL B C D E F G H I J K L M N P Q 7

Figure 2: The Unix directory with file sizes 8

Listing a directory // Algorithm (not a complete C code) listall ( struct TreeNode *t, int depth) { printname ( t, depth ); if (isdirectory()) for each file c in this directory (for each child) listall(c, depth+1 ); } printname() function prints the name of the object after depth number of tabs -indentation. In this way, the output is nicely formatted on the screen. The order of visiting the nodes in a tree is important while traversing a tree. Here, the nodes are visited according to preorder traversal strategy. 9

Figure 3: The directory listing for the tree shown in Figure 2 10

Size of a directory int FileSystem::size () const { int totalsize = sizeofthisfile(); } if (isdirectory()) for each file c in this directory (for each child) totalsize += c.size(); return totalsize; The nodes are visited using postorder strategy. The work at a node is done after processing each child of that node. 11

Figure 18.9 A trace of the size method 12

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 Algorithm preorder(v) visit(v) for each child w of v preorder (w) 1 Make Money Fast! 2 1. Motivations 2. Methods References 5 9 3 4 1.1 Greed 1.2 Avidity 6 7 8 2.1 Stock Fraud 2.2 Ponzi Scheme 2.3 Bank Robbery 13

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 cs16/ Algorithm postorder(v) for each child w of v postorder (w) visit(v) 3 homeworks/ 7 programs/ 8 todo.txt 1K 1 2 4 5 6 h1c.doc 3K h1nc.doc 2K DDR.java 10K Stocks.java 25K Robot.java 20K 14

Binary Trees A binary tree is a tree in which no node can have more than two children The depth can be as large as N-1 in the worst case. T L root T R A binary tree consisting of a root and two subtrees T L and T R, both of which could possibly be empty. 15

Binary Tree Terminology Left Child The left child of node n is a node directly below and to the left of node n in a binary tree. Right Child The right child of node n is a node directly below and to the right of node n in a binary tree. Left Subtree In a binary tree, the left subtree of node n is the left child (if any) of node n plus its descendants. Right Subtree In a binary tree, the right subtree of node n is the right child (if any) of node n plus its descendants. 16

Binary Tree -- Example B A D C E A is the root. B is the left child of A, and C is the right child of A. D doesn t have a right child. H doesn t have a left child. B, F, G and I are leaves. F G H I 17

Binary Tree Representing Algebraic Expressions 18

Height of Binary Tree The height of a binary tree T can be defined recursively as: If T is empty, its height is -1. If T is non-empty tree, then since T is of the form r T L T R the height of T is 1 greater than the height of its root s taller subtree; i.e. height(t) = 1 + max{height(t L ),height(t R )} 19

Height of Binary Tree (cont.) Binary trees with the same nodes but different heights 20

Number of Binary trees with Same # of Nodes n=0 empty tree n=1 (1 tree) n=2 (2 trees) n=3 (5 trees) 21

Full Binary Tree In a full binary tree of height h, all nodes that are at a level less than h have two children each. Each node in a full binary tree has left and right subtrees of the same height. Among binary trees of height h, a full binary tree has as many leaves as possible, and they all are at level h. A full binary has no missing nodes. Recursive definition of full binary tree: If T is empty, T is a full binary tree of height -1. If T is not empty and has height h>0, T is a full binary tree if its root s subtrees are both full binary trees of height h-1. 22

Full Binary Tree Example A full binary tree of height 2 23

Complete Binary Tree A complete binary tree of height h is a binary tree that is full down to level h-1, with level h filled in from left to right. A binary tree T of height h is complete if 1. All nodes at level h-2 and above have two children each, and 2. When a node at level h-1 has children, all nodes to its left at the same level have two children each, and 3. When a node at level h-1 has one child, it is a left child. A full binary tree is a complete binary tree. 24

Complete Binary Tree Example 25

Balanced Binary Tree A binary tree is height balanced (or balanced), if the height of any node s right subtree differs from the height of the node s left subtree by no more than 1. A complete binary tree is a balanced tree. Other height balanced trees: AVL trees Red-Black trees B-trees... 26

A Pointer-Based Implementation of Binary Trees struct BinaryNode { Object element; struct BinaryNode *left; struct BinaryNode *right; }; 27

Binary Tree Traversals Preorder Traversal the node is visited before its left and right subtrees, Postorder Traversal the node is visited after both subtrees. Inorder Traversal the node is visited between the subtrees, Visit left subtree, visit the node, and visit the right subtree. 28

Binary Tree Traversals 29

Preorder void preorder(struct tree_node * p) { if (p!=null) { printf( %d\n, p->data); preorder(p->left_child); preorder(p->right_child); } } 30

Inorder void inorder(struct tree_node *p) { if (p!=null) { inorder(p->left_child); printf( %d\n, p->data); inorder(p->right_child); } } 31

Postorder void postorder(struct tree_node *p) { if (p!=null) { postorder(p->left_child); postorder(p->right_child); printf( %d\n, p->data); } } 32

Finding the maximum value in a binary tree int FindMax(struct tree_node *p) { int root_val, left, right, max; max = -1; // Assuming all values are positive integers if (p!=null) { root_val = p -> data; left = FindMax(p ->left_child); right = FindMax(p->right_child); } // Find the largest of the three values. if (left > right) max = left; else max = right; if (root_val > max) max = root_val; } return max; 33

Adding up all values in a Binary Tree int add(struct tree_node *p) { } if (p == NULL) return 0; else return (p->data + add(p->left_child)+ add(p->right_child)); 34

Exercises 1. Write a function that will count the leaves of a binary tree. 2. Write a function that will find the height of a binary tree. 3. Write a function that will interchange all left and right subtrees in a binary tree. 35

Binary Search Trees An important application of binary trees is their use in searching. Binary search tree is a binary tree in which every node X contains a data value that satisfies the following: a) all data values in its left subtree are smaller than the data value in X b) the data value in X is smaller than all the values in its right subtree. c) the left and right subtrees are also binary search tees. 36

Example 6 6 2 8 2 8 1 4 1 4 3 3 7 A binary search tree Not a binary search tree, but a binary tree 37

Binary Search Trees containing same data 38

Operations on BSTs Most of the operations on binary trees are O(logN). This is the main motivation for using binary trees rather than using ordinary lists to store items. Most of the operations can be implemented using recursion. we generally do not need to worry about running out of stack space, since the average depth of binary search trees is O(logN). 39

The BinaryNode class template <class Comparable> class BinaryNode { Comparable element; // this is the item stored in the node BinaryNode *left; BinaryNode *right; }; BinaryNode( const Comparable & theelement, BinaryNode *lt, BinaryNode *rt ) : element( theelement ), left( lt ), right( rt ) { } 40

find /** * Method to find an item in a subtree. * x is item to search for. * t is the node that roots the tree. * Return node containing the matched item. */ template <class Comparable> BinaryNode<Comparable> * find( const Comparable & x, BinaryNode<Comparable> *t ) const { if( t == NULL ) return NULL; else if( x < t->element ) return find( x, t->left ); else if( t->element < x ) return find( x, t->right ); else return t; // Match } 41

findmin (recursive implementation) /** * method to find the smallest item in a subtree t. * Return node containing the smallest item. */ template <class Comparable> BinaryNode<Comparable> * findmin( BinaryNode<Comparable> *t ) const { if( t == NULL ) return NULL; if( t->left == NULL ) return t; return findmin( t->left ); } 42

findmax (nonrecursive implementation) /** *method to find the largest item in a subtree t. *Return node containing the largest item. */ template <class Comparable> BinaryNode<Comparable> * findmax( BinaryNode<Comparable> *t ) const { if( t!= NULL ) while( t->right!= NULL ) t = t->right; return t; } 43

Insert operation Algorithm for inserting X into tree T: Proceed down the tree as you would with a find operation. if X is found do nothing, (or update something) else insert X at the last spot on the path traversed. 44

Example Insert 5 6 2 8 1 4 3 5 What about duplicates? 45

Insertion into a BST /* method to insert into a subtree. * x is the item to insert. * t is the node that roots the tree. * Set the new root. */ template <class Comparable> void insert( const Comparable & x, BinaryNode<Comparable> * & t ) const { if( t == NULL ) t = new BinaryNode<Comparable>( x, NULL, NULL ); else if( x < t->element ) insert( x, t->left ); else if( t->element < x ) insert( x, t->right ); else ; // Duplicate; do nothing } 46

Deletion operation There are three cases to consider: 1. Deleting a leaf node Replace the link to the deleted node by NULL. 2. Deleting a node with one child: The node can be deleted after its parent adjusts a link to bypass the node. 3. Deleting a node with two children: The deleted value must be replaced by an existing value that is either one of the following: The largest value in the deleted node s left subtree The smallest value in the deleted node s right subtree. 47

Deletion Case1: A Leaf Node To remove the leaf containing the item, we have to set the pointer in its parent to NULL. 50 Delete 70 (A leaf node) 50 40 60 40 60 30 45 70 30 45 42 42 48

Deletion Case2: A Node with only a left child Delete 45 (A node with only a left child) 50 50 40 60 40 60 30 45 70 30 42 70 42 49

Deletion Case2: A Node with only a right child 50 Delete 60 (A node with only a right child) 50 40 60 40 70 30 45 70 30 45 42 42 50

Deletion Case3: A Node with two children Locate the inorder successor of the node. Copy the item in this node into the node which contains the item which will be deleted. Delete the node of the inorder successor. Delete 40 (A node with two children) 50 50 40 60 42 60 30 45 70 30 45 70 42 51

Deletion Case3: A Node with two children 52

Deletion routine for BST template <class Comparable> void remove( const Comparable & x, BinaryNode<Comparable> * & t ) const { } if( t == NULL ) return; // Item not found; do nothing if( x < t->element ) remove( x, t->left ); else if( t->element < x ) remove( x, t->right ); else if( t->left!= NULL && t->right!= NULL { t->element = findmin( t->right )->element; remove( t->element, t->right ); } else { BinaryNode<Comparable> *oldnode = t; t = ( t->left!= NULL )? t->left : t->right; delete oldnode; } 53

Analysis of BST Operations The cost of an operation is proportional to the depth of the last accessed node. The cost is logarithmic for a well-balanced tree, but it could be as bad as linear for a degenerate tree. In the best case we have logarithmic access cost, and in the worst case we have linear access cost. 54

Figure 19.19 (a) The balanced tree has a depth of log N; (b) the unbalanced tree has a depth of N 1. 55

Maximum and Minimum Heights of a Binary Tree The efficiency of most of the binary tree (and BST) operations depends on the height of the tree. The maximum number of key comparisons for retrieval, deletion, and insertion operations for BSTs is the height of the tree. The maximum of height of a binary tree with n nodes is n-1. Each level of a minimum height tree, except the last level, must contain as many nodes as possible. 56

Maximum and Minimum Heights of a Binary Tree A maximum-height binary tree with seven nodes Some binary trees of height 2 57

Counting the nodes in a full binary tree 58

Some Height Theorems Theorem 10-2: A full binary of height h 0 has 2 h+1-1 nodes. Theorem 10-3: The maximum number of nodes that a binary tree of height h can have is 2 h+1-1. We cannot insert a new node into a full binary tree without increasing its height. 59

Some Height Theorems Theorem 10-4: The minimum height of a binary tree with n nodes is log 2 (n+1). Proof: Let h be the smallest integer such that n 2 h+1-1. We can establish following facts: Fact 1 A binary tree whose height is h-1 has n nodes. Otherwise h cannot be smallest integer in our assumption. Fact 2 There exists a complete binary tree of height h that has exactly n nodes. A full binary tree of height h-1 has 2 h -1 nodes. Since a binary tree of height h cannot have more than 2 h+1-1 nodes. At level h, we will reach n nodes. Fact 3 The minimum height of a binary tree with n nodes is the smallest integer h such that n 2 h+1-1. So, 2 h -1 < n 2 h+1-1 2 h < n+1 2 h+1 h < log 2 (n+1) h+1 Thus, h = log 2 (n+1) is the minimum height of a binary tree with n nodes. 60

Minimum Height Complete trees and full trees have minimum height. The height of an n-node binary search tree ranges from log 2 (n+1) to n-1. Insertion in search-key order produces a maximum-height binary search tree. Insertion in random order produces a near-minimum-height binary tree. That is, the height of an n-node binary search tree Best Case log 2 (n+1) O(log 2 n) Worst Case n-1 O(n) Average Case close to log 2 (n+1) O(log 2 n) In fact, 1.39log 2 n 61

Average Height Suppose we re inserting n items into an empty binary search tree to create a binary search tree with n nodes, How many different binary search trees with n nodes, and What are their probabilities, There are n! different orderings of n keys. But how many different binary search trees with n nodes? n=0 1 BST (empty tree) n=1 1 BST (a binary tree with a single node) n=2 2 BSTs n=3 5 BSTs 62

Average Height (cont.) n=3 Probabilities: 1/6 1/6 2/6 1/6 1/6 Insertion Order: 3,2,1 3,1,2 2,1,3 1,3,2 1,2,3 2,3,1 63

Order of Operations on BSTs 64

Treesort We can use a binary search tree to sort an array. treesort(inout anarray:arraytype, in n:integer) // Sorts n integers in an array anarray // into ascending order Insert anarray s elements into a binary search tree btree Traverse btree in inorder. As you visit btree s nodes, copy their data items into successive locations of anarray 65

Treesort Analysis Inserting an item into a binary search tree: Worst Case: O(n) Average Case: O(log 2 n) Inserting n items into a binary search tree: Worst Case: O(n 2 ) (1+2+...+n) = O(n 2 ) Average Case: O(n*log 2 n) Inorder traversal and copy items back into array O(n) Thus, treesort is O(n 2 ) in worst case, and O(n*log 2 n) in average case. Treesort makes exactly the same comparisons of keys as quicksort when the pivot for each sublist is chosen to be the first key. 66

Save: Saving a BST into a file, and restoring it to its original shape Use a preorder traversal to save the nodes of the BST into a file. Restore: Start with an empty BST. Read the nodes from the file one by one, and insert them into the BST. 67

Saving a BST into a file, and restoring it to its original shape Preorder: 60 20 10 40 30 50 70 68

Save: Saving a BST into a file, and restoring it to a minimum-height BST Use an inorder traversal to save the nodes of the BST into a file. The saved nodes will be in ascending order. Save the number of nodes (n) in somewhere. Restore: Read the number of nodes (n). Start with an empty BST. Read the nodes from the file one by one to create a minimumheight binary search tree. 69

Building a minimum-height BST readtree(out treeptr:treenodeptr, in n:integer) // Builds a minimum-height binary search tree fro n sorted // values in a file. treeptr will point to the tree s root. if (n>0) { // construct the left subtree treeptr = pointer to new node with NULL child pointers readtree(treeptr->leftchildptr, n/2) // get the root Read item from file into treeptr->item } // construct the right subtree readtree(treeptr->rightchildptr, (n-1)/2) 70

A full tree saved in a file by using inorder traversal 71