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.

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.
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.
CSC212 Data Structure - Section AB Lecture 20 Hashing Instructor: Edgardo Molina Department of Computer Science City College of New York.
 Chapter 7 introduces the stack data type.  Several example applications of stacks are given in that chapter.  This presentation shows another use called.
P Chapter 6 introduces the stack data type. p Several example applications of stacks are given in that chapter. p 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.
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.
Copyright © 1999, Carnegie Mellon. All Rights Reserved. Chapter 12 presents several common algorithms for sorting an array of integers. Two slow but simple.
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.
1 Trees III: Binary Search Trees. 2 A forest full of trees The generic toolkit of functions we have seen thus far can be applied to many types of data.
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.
Sorting Sorting Arranging items in a collection so that there is an ordering on one (or more) of the fields in the items Sort Key The field (or fields)
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.
 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.
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.
CSC212 Data Structure Lecture 16 Heaps and Priority Queues Instructor: George Wolberg Department of Computer Science City College of New York.
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.
Binary Search Trees One of the tree applications in Chapter 10 is binary search trees. In Chapter 10, binary search trees are used to implement bags.
CSC212 Data Structure - Section AB
(edited by Nadia Al-Ghreimil)
Using a Stack Chapter 6 introduces the stack data type.
Recursive Thinking Chapter 8 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Hash Tables Chapter 11 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common approach.
Complete Binary Trees Chapter 9 introduces trees.
i206: Lecture 14: Heaps, Graphs intro.
Binary Search Trees One of the tree applications in Chapter 10 is binary search trees. In Chapter 10, binary search trees are used to implement bags.
Using a Stack Chapter 6 introduces the stack data type.
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.
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.
Using a Stack Chapter 6 introduces the stack data type.
Heaps Chapter 11 has several programming projects, including a project that uses heaps. This presentation shows you what a heap is, and demonstrates.
Using a Stack Chapter 6 introduces the stack data type.
Hash Tables Chapter 12 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common.
Hash Tables Chapter 11 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common approach.
Hash Tables Chapter 12 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common.
Hash Tables Chapter 11 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common approach.
CSC212 Data Structure - Section KL
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.
B-Trees.
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.
Hash Tables Chapter 11 discusses several ways of storing information in an array, and later searching for the information. Hash tables are a common approach.
Presentation transcript:

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 sets. This presentation illustrates how another data type called a dictionary is implemented with binary search trees. This lecture shows a common application of binary trees: Binary Search Trees used to implement a Dictionary data type. Before this lecture, students should have a good understanding of binary trees, and should have seen some basic container data types similar to a dictionary (for example, a bag or a set). Data Structures and Other Objects Using Java

The Dictionary Data Type A dictionary is a collection of items, similar to a bag. But unlike a bag, each item has a string attached to it, called the item's key. This lecture shows how to use a binary tree to implement an abstract data structure called a Dictionary. We"ll start by explaining what a Dictionary is, without any reference to trees. Then we will show how the trees can be used to actually implement a Dictionary. It's important to realize that trees are but one possible way to implement a Dictionary, and the actual explanation of "What is a Dictionary?" will not refer to trees at all. In other words, a Dictionary is an abstract data type, and the trees are one of the mechanisms that can be used to implement the Dictionary. So, what is a Dictionary? In many ways it is like other ADTs that you have seen, such as a bag which contains a collection of items. The difference is that each item in a Dictionary is attached to a string called the item's key.

The Dictionary Data Type A dictionary is a collection of items, similar to a bag. But unlike a bag, each item has a string attached to it, called the item's key. For this example, each item that I"m putting in the Dictionary is a record which contain a bunch of geographical information about a state. Example: The items I am storing are records containing data about a state.

The Dictionary Data Type A dictionary is a collection of items, similar to a bag. But unlike a bag, each item has a string attached to it, called the item's key. The key for each record is the name of the state. In general, the keys could be some other sort of value such as social security numbers. The keys must have the property that they form a total order under some comparison operation such as “less than”. Often, the keys are strings. Example: The key for each record is the name of the state. Washington

The Dictionary Data Type public void insert(The key for the new item, The new item) The insertion method for a dictionary has two parameters. When an item is placed into the Dictionary, we must specify both the record of information and the key that is attached to that information. For example, if the Dictionary is implemented as an object type, then there will be an Insert method. The Insert method will have two parameters: a string (which is the key) and a record (which is the item being inserted). Washington

The Dictionary Data Type When you want to retrieve an item, you specify the key... When you want to retrieve information from the Dictionary, you call a retrieval method, and specify the key of the item that you are looking for. This key is the parameter of the retrieval method. public Object retrieve("Washington")

The Dictionary Data Type When you want to retrieve an item, you specify the key... ... and the retrieval method returns the item. The Dictionary finds the information, and returns it. public Object retrieve("Washington")

The Dictionary Data Type We"ll look at how a binary tree can be used as the internal storage mechanism for the dictionary. That's enough about the abstract workings of a Dictionary. Now we are going to look at how a binary tree can be used to store the information of a Dictionary in a way that makes it fairly easy to add new items, to retrieve existing items, and to remove items. (You never know when a state might want to secede from the union.)

A Binary Search Tree of States Florida The data in the dictionary will be stored in a binary tree, with each node containing an item and a key. Oklahoma Colorado Arizona Arkansas Mass. Washington As you might have guessed, the data in the dictionary will be stored in a binary tree, with each node containing both a record of information and the key that's attached to that information. In this example, the Dictionary currently has only 9 of the 50 states, but that's enough to illustrate the idea. Hampshire New Virginia West

A Binary Search Tree of States Florida Storage rules: Every key to the left of a node is alphabetically before the key of the node. Oklahoma Colorado Arizona Arkansas Colorado Mass. Washington The nodes cannot appear in just any order. The nodes must follow the special storage rules of a binary search tree. There are two such rules: 1. Every key to the left of a node is alphabetically before the key of the node. Hampshire New Virginia West

A Binary Search Tree of States Florida Storage rules: Every key to the left of a node is alphabetically before the key of the node. Oklahoma Colorado Arizona Mass. Washington Example: " Massachusetts" and " New Hampshire" are alphabetically before "Oklahoma" Notice that this rule applies to every which can be reached by starting down the left branch of a node. For example, if I start at Oklahoma, and head down the left branch, I can reach Massachusetts and New Hampshire. So, both Massachusetts and New Hampshire must be alphabetically before Oklahoma. Hampshire New Virginia West Arkansas

A Binary Search Tree of States Storage rules: Every key to the left of a node is alphabetically before the key of the node. Every key to the right of a node is alphabetically after the key of the node. Florida Oklahoma Colorado Arizona Mass. Washington The second rule is the mirror image of the first rule: 2. Every key to the right of a node is alphabetically after the key of the node. Hampshire New Virginia West Arkansas

Retrieving Data Start at the root. If the current node has the key, then stop and retrieve the data. If the current node's key is too large, move left and repeat 1-3. If the current node's key is too small, move right and repeat 1-3. Florida Oklahoma Colorado Arizona Mass. Washington Once a tree is organized according to the storage rule of a binary search tree, it is easy to find any particular key, following this algorithm. The algorithm starts at the root and repeatedly executes these steps. 1. First check to see if we found the key we were looking for. If so, then we can stop and return the associated information. 2. On the other hand, if the key at the current node is larger than the key that we"re searching for, then we"ll continue our search by moving leftward. 3. And if the key at the current node is smaller than the key that we"re searching for, then we"ll continue our search by moving rightward. Hampshire New Virginia West Arkansas

Retrieve "New Hampshire" Start at the root. If the current node has the key, then stop and retrieve the data. If the current node's key is too large, move left and repeat 1-3. If the current node's key is too small, move right and repeat 1-3. Florida Oklahoma Colorado Arizona Mass. Washington We have moved right from Florida, because Florida is smaller than New Hampshire. Or to be more specific: The name "Florida" is alphabetically before the name "New Hampshire". That's what we mean by 'smaller". Now we have arrived at Oklahoma. Which way next? Hampshire New Virginia West Arkansas

Adding a New Item with a Given Key Florida Pretend that you are trying to find the key, but stop when there is no node to move to. Add the new node at the spot where you would have moved to if there had been a node. Oklahoma Colorado Arizona Mass. Washington Adding a new node requires two steps, the first of which is similar to searching. In this first step we pretend that we are trying to find the key. Of course, we won"t find the key, because it is not yet in the tree. So eventually we will reach a spot where there is no "next node" to step onto. At this point we stop and add the new node. Hampshire New Virginia West Arkansas

Adding Iowa Florida Pretend that you are trying to find the key, but stop when there is no node to move to. Add the new node at the spot where you would have moved to if there had been a node. Oklahoma Colorado Arizona Mass. Washington For example, suppose that Iowa wants to join our dictionary. We start by pretending to search for Iowa, beginning at the root... Hampshire New Virginia West Arkansas

Adding Iowa Florida Pretend that you are trying to find the key, but stop when there is no node to move to. Add the new node at the spot where you would have moved to if there had been a node. Oklahoma Colorado Arizona Mass. Washington ...and from Massachusetts we would move left again, if we could. But there is no node here. So we stop... Hampshire New Virginia West Arkansas

Adding Florida Pretend that you are trying to find the key, but stop when there is no node to move to. Add the new node at the spot where you would have moved to if there had been a node. Oklahoma Colorado Arizona Mass. Washington ...and this is the location for Iowa. Later, when we are searching for Iowa, we will follow the same path down to Massachusetts. We will step left from Massachusetts, and there we find our goal of Iowa. Important note: New nodes are always added at the leaves. Iowa Hampshire New Virginia West Arkansas

Adding Where would you add this state? Kazakhstan Florida Where would you add this state? Oklahoma Colorado Arizona Mass. Washington One more example: Where would you add the new state of Kazakhstan?... Iowa Hampshire New Virginia West Arkansas

Adding Kazakhstan is the new right child of Iowa? Florida Kazakhstan is the new right child of Iowa? Oklahoma Colorado Arizona Mass. Washington If you followed the algorithm, then you saw that Kazakhstan is added as the right child of Iowa. Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing an Item with a Given Key Florida Find the item. If necessary, swap the item with one that is easier to remove. Remove the item. Oklahoma Colorado Arizona Mass. Washington Removing an item requires three steps. We can look at the steps in detail in a moment, but first let's go through this outline so that you know roughly what to expect. 1. Find the item that you want to remove. 2. Some items are harder to remove than others. In particular, an item with two children is particularly hard to remove. So, in this second step we sometimes take an item that is hard to remove, and exchange it with an item that is easier to remove. 3. Finally, once the item is in a spot that is easy to remove, we remove it. Let's look at the three steps in detail. Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" Find the item. Oklahoma Colorado Arizona Mass. Washington As an example, let's remove Florida. (It's way too hot to be part of the union anyway). First we find it, which is easy enough by using the usual method to search for a key. Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" Florida cannot be Oklahoma Colorado Arizona Mass. Florida cannot be removed at the moment... Washington In the second step we need to swap Florida with another item that is easier to remove. The reason that we need to do this swap is because of a problem that occurs if we just try to remove Florida... Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" ... because removing Oklahoma Colorado Arizona Mass. ... because removing Florida would break the tree into two pieces. Washington We end up breaking the tree into two separate parts. Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" If necessary, do some rearranging. The problem of Oklahoma Colorado Arizona Mass. The problem of breaking the tree happens because Florida has 2 children. Washington In general it is hard to recombine these two parts into a single tree. So, our goal is to find another item that is easier to remove, and copy that other item spot that we are trying to remove. Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" If necessary, do some rearranging. Oklahoma Colorado Arizona Mass. For the rearranging, take the smallest item in the right subtree... Washington In general, there are two items that we could copy on top of Florida. In the book you"ll see that one of these items is in the left subtree. In this lecture I"ll use the other one, from the right subtree. In an actual program you can follow either approach. Anyway, the approach we"ll take here is to copy the smallest item in the right subtree onto Florida. To find that smallest item, step onto the right subtree (Oklahoma), and then race as far left as you can -- onto Iowa. Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" If necessary, do some rearranging. Iowa If necessary, do some rearranging. Oklahoma Colorado Arizona Mass. ...copy that smallest item onto the item that we’re removing... Washington Copy Iowa on top of the item that we are removing. Iowa Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" If necessary, do some rearranging. Iowa If necessary, do some rearranging. Oklahoma Colorado Arizona Mass. ... and then remove the extra copy of the item we copied... Washington We have eliminated Florida, but now we have two copies of Iowa. If you"ve ever been to Iowa, you know that one Iowa is more than enough, so next we must remove the extra Iowa... Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" If necessary, do some rearranging. Iowa If necessary, do some rearranging. Oklahoma Colorado Arizona Mass. Washington Note that the extra Iowa had one child (Kazakhstan), so that child is reconnected to the parent. Here's a good question for you: Remember that it's hard to remove nodes with two children. How do you know that the smallest item in the right subtree does not have two children? Answer: Since it is the smallest item, it can"t have a left child because that left child would be even smaller. ... and reconnect the tree Kazakhstan Hampshire New Virginia West Arkansas

Removing "Florida" Why did I choose the smallest item Oklahoma Colorado Arizona Mass. Why did I choose the smallest item in the right subtree? Washington In fact, the guarantee that the smallest item has at most one child is one of the reasons why I selected the smallest item. There's a second reason, can you think of it? Hampshire New Virginia West Arkansas Kazakhstan

Removing "Florida" Because every key Iowa Oklahoma Colorado Arizona Mass. Because every key must be smaller than the keys in its right subtree Washington The second reason is that I am take this smallest item and place it in Florida's location. In order to maintain the binary search tree storage rules, this item must be smaller than anything that remains in the right subtree--therefore I must choose the smallest item in the right subtree. Kazakhstan Hampshire New Virginia West Arkansas

Removing an Item with a Given Key Find the item. If the item has a right child, rearrange the tree: Find smallest item in the right subtree Copy that smallest item onto the one that you want to remove Remove the extra copy of the smallest item (making sure that you keep the tree connected) else just remove the item. Here's a summary of the removal steps. Note that if the item that we want to remove does not have a right child, then we can just remove it (and reconnect its left child if there is one). In the text book, the process is done in a symmetrical way--using the largest item in the left subtree. Either approach works fine. Also, the textbook implements a Bag rather than a Dictionary. One of the resultant differences is that the Bag may have several copies of the same item, so that items in the left subtree can be less than or equal to the item in a node.

Summary Binary search trees are a good implementation of data types such as sets, bags, and dictionaries. Searching for an item is generally quick since you move from the root to the item, without looking at many other items. Adding and deleting items is also quick. But as you’ll see later, it is possible for the quickness to fail in some cases -- can you see why? A quick summary . . .

Feel free to send your ideas to: Michael Main main@colorado.edu Presentation copyright 1999 Addison Wesley Longman, For use with Data Structures and Other Objects Using Java by Michael Main. 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 Java are welcome to use this presentation however they see fit, so long as this copyright notice remains intact. Feel free to send your ideas to: Michael Main main@colorado.edu THE END