167
Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Embed Size (px)

Citation preview

Page 1: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching via Traversals Searching a Binary Search Tree (BST)

Binary Search on a Sorted Array Data Structure Conversion

and Helper Modules

Page 2: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Plan of Attack

• Simple searching just involves traversing a data structure until the data element is found.

• The only twist is that if the collection is ordered (like a linked lists) you can stop if you don’t find an element and you pass the point where it should be located.

• So we’re going to skip numerous slides which essentially review material we’ve already covered.

• So we’re going to focus on Binary Search and Data Structure Conversion

• But first the twist...

LB

Page 3: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

Page 122

Page 4: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

okToExit isoftype Boolean okToExit <- FALSE loop exitif(okToExit) if(cur = NIL OR cur^.data > target) then okToExit <- TRUE print(“Target data not found”) elseif(cur^.data = target) then okToExit = TRUE print(“Found target”) // Could transfer data to param here else

cur <- cur^.next endif endloop

endprocedure // Search

LB

Page 5: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Same logic can be applied to Trees

Skipping stuff starting on Page 120!

LB

Page 6: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching via Traversals

Page 7: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Example

• Imagine we have a database of students• I want to know if Bob Smith is in my

class.

• I want to search my database and have the module print out “IN THE CLASS” or “NOT IN THE CLASS.”

Page 8: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Another Situation

• I have the same student database.• I need to view Alice Jones’ grades

and update them.

• Again, I need to search the database.• This time, I need Alice’s information

returned to me so I can view and modify them (i.e. need access).

Page 9: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Scenario

• We have some collection(stored in an array, tree, or list)–May be sorted or not–May be empty or not

• We want the determine if a particular element is in the collection or not.

• We need to search for the element.

Page 10: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching

• Given the collection and an element to find…

• Determine whether the “target” element was found in the collection– Print a message– Return a value

(an index or pointer, etc.)• Don’t modify the collection in the

search!

Page 11: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Key Fields

• Often, our collections will hold complex structures (i.e. have many items of information in each).

• It is common to organize our collection using one “part” (or field)– Name– Student Number

• This is called the “key field”• Then we can search on the key field.

Page 12: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

A Simple Search

• A search traverses the collection until– The desired element is found – Or the collection is exhausted

• If the collection is ordered, I might not have to look at all elements– I can stop looking when I know

the element cannot be in the collection.

Page 13: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching in an Unordered Collection

• Let’s determine if the value 12 is in the collection:

35 42 12 5 \\

12 Found!

Head

Page 14: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching in an Unordered Collection

• Let’s determine if the value 13 is in the collection:

35 42 12 5 \\

13 Not Found!

Head

Page 15: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching in an Ordered Collection

• Let’s determine if the value 13 is in the collection:

5 12 35 42 \\

13 Not Found!

Head

Page 16: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Search Examples

Arrays

Linked Lists

Binary Trees

Page 17: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Search Example on a List

Page 18: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Search

Let’s build a module to search a list of numbers using iteration.

We’ll print whether the number was found or not.

Steps:– Traverse until we find a match

or reach the end.– Print the results.

Page 19: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Un-Ordered Searchprocedure Search ( ??? ) loop ??? exitif( ??? ) ??? endloop

if( ??? ) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 20: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Un-Ordered Searchprocedure Search ( cur isoftype in ptr toa Node,

target isoftype in Num ) loop ??? exitif( ??? ) ??? endloop

if( ??? ) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 21: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Un-Ordered Searchprocedure Search ( cur isoftype in ptr toa Node,

target isoftype in Num ) loop exitif( cur = NIL ) cur <- cur^.next endloop

if( ??? ) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 22: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Un-Ordered Searchprocedure Search ( cur isoftype in ptr toa Node,

target isoftype in Num ) loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if( ??? ) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 23: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Un-Ordered Searchprocedure Search ( cur isoftype in ptr toa Node,

target isoftype in Num ) loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if( cur = NIL ) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 24: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Un-Ordered Searchprocedure Search ( cur isoftype in ptr toa Node,

target isoftype in Num ) loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if( cur = NIL ) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 25: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

What’s Different for An Iterative Ordered Search?

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if( cur = NIL ) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 26: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Iterative Ordered Searchprocedure Search ( cur isoftype in ptr toa Node,

target isoftype in Num ) loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 27: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Tracing the Search

Now let’s call the un-ordered version of the module:

algorithm Example

. . .

Search(head, 4)

. . .

endalgorithm // Example

7 22 8 4 34head

Page 28: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 29: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 30: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 31: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 32: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 33: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 34: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 35: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 36: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 37: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 38: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 39: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 40: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 41: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 42: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 43: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 44: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Target data found

Page 45: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data = target)) cur <- cur^.next endloop

if(cur = NIL) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

7 22 8 4 34head

target = 4cur

Page 46: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Tracing the Ordered Search

Now let’s call the ordered version of the module:

algorithm Example

. . .

Search(head, 9)

. . .

endalgorithm // Example

4 7 8 22 34head

Page 47: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Page 48: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Page 49: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Page 50: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Page 51: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Page 52: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Page 53: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Target data not found

Page 54: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search ( cur isoftype in ptr toa Node, target isoftype in Num )

loop exitif((cur = NIL) OR (cur^.data >= target)) cur <- cur^.next endloop

if((cur = NIL) OR (cur^.data > target)) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

target = 9cur

4 7 8 22 34head

Page 55: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching an Array

• Same principles apply:– Examine cells until we find a match

or exhaust the possibilities– Then indicate whether the item was

in the collection (print or return information)

12 42 35 101 77 5

Page 56: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Un-Ordered Iterative Array Search

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

Page 57: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Calling the Module

algorithm Example2

MAX is 6

. . .

Search(MyNumArray, 13)

. . .

endalgorithm // Example2

Page 58: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 59: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 60: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 61: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 62: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 63: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 64: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 65: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Target data found

Page 66: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

procedure Search(my_array isoftype in NumArrayType, target isoftype in Num) i isoftype Num i <- 1 loop exitif((i > MAX) OR (my_array[i] = target)) i <- i + 1 endloop

if(i > MAX) then print(“Target data not found”) else print(“Target data found”) endifendprocedure // Search

my_array7 12 5 22 13 32

1 2 3 4 5 6target = 13

Page 67: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Tree Searches

14

9

28

42

3 56

Page 130

Page 68: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching With Binary Trees

Have to visit every node in the binary tree.

3 types of traversals:

Preorder Inorder Postorder

Check Node

Go left

Go right

Go left

Check Node

Go right

Go left

Go right

Check Node

Page 69: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Pre-Order Search Traversal Algorithm

• As soon as we get to a node, check to see if we have a match

• Otherwise, look for the element in the left sub-tree

• Otherwise, look for the element in the right sub-tree

14

Left ??? Right ???

Page 70: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Search on a Binary Tree

function BTSearch returnsa Boolean

(cur iot in ptr toa Node, toFind iot in Num)

if (cur = NIL) then

BTSearch returns false

elseif (cur^.data = toFind) then

BTSearch returns true

else

BTSearch returns BTSearch(cur^.left, toFind)

OR BTSearch(cur^.right, toFind)

endif

endfunction // BTSearch

Page 71: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

94

cur

36

6722 14 9

3

Find 14

LB

Page 72: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

94cur

36

6722 14 9

3

Find 14

LB

Page 73: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

94

36

6722 14 9

3

Find 14

cur

LB

Page 74: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

94

36

6722 14 9

3

Find 14

cur

LB

Page 75: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

94

36

6722 14 9

3

Find 14

cur

LB

Page 76: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

94

36

6722 14 9

3

Find 14...Found!!!

cur

LB

Page 77: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Search on a Binary Tree

function BTSearch returnsa Boolean

(cur iot in ptr toa Node, toFind iot in Num)

if (cur = NIL) then

BTSearch returns false

elseif (cur^.data = toFind) then

BTSearch returns true

else

BTSearch returns BTSearch(cur^.left, toFind)

OR BTSearch(cur^.right, toFind)

endif

endfunction // BTSearch

LB

Once we’ve found the 14 dowe search the right subtree?

Page 78: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Summary

• Searches involve visiting elements in a collection until– A match is found– Or until all possible locations are exhausted

• With sorted collections, we may be able to “stop early”

• Once we determine if the element is in the collection, then we do some work:– Print the results– Return some information (pointer, index)

Page 79: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Questions?

Page 80: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Searching a Binary Search Tree (BST)

Page 81: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Scenario

• We’ve got a Binary Search Tree and we want to determine if an element is in the collection.

14

LessThan

14

GreaterThan

14

Page 82: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Cutting the Work in Half

• In searching for a match, we can ignore half of the tree at each comparison.

14

LessThan

14

Looking for 42…

It must be to theright!

GreaterThan

14

Page 83: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Binary Search Algorithm

if at NIL // not found

DO NOT FOUND WORK

elseif ( match ) then // found

DO FOUND WORK

elseif ( value to match < current value )

recurse left // must be to left

else

recurse right // must be to right

Page 84: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Binary Search for a BST

procedure Search(cur iot in Ptr toa Node, target isoftype in Num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Page 85: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

head

42

.

.Search(head, 35)Search(head, 87)..

23

35

47

Page 86: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

head

42

.

.Search(head, 35)Search(head, 87)..

23

35

47

Page 87: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

cur

Page 88: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

cur

Page 89: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

cur

Page 90: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

cur

Page 91: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 92: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 93: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 94: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 95: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 96: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

target = 35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 97: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Target Found

cur

Page 98: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 99: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 100: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

47

cur

Page 101: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Page 102: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

cur

Page 103: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

cur

Page 104: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

cur

Page 105: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

cur

Page 106: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 107: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 108: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 109: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 110: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

target = 87

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 111: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Not Found

cur

Page 112: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 113: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 114: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Procedure Search( cur iot in Ptr toa Node, target iot in num) if(cur = NIL) then print(“Not Found”) elseif(cur^.data = target) print(“Target Found”) elseif(cur^.data > target) Search(cur^.left, target) else Search(cur^.right, target) endifendprocedure // Search

cur

Page 115: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

.

.Search(head, 35)Search(head, 87)..

head

42

23

35

47

Page 116: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Summary

• We can cut the work in half after each comparison.

• Recurse in one direction – left or right.

• When we reach NIL, then we no the value wasn’t in the binary search tree.

Page 117: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Questions?

Page 118: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search on a Sorted Array

Page 119: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Scenario

• We have a sorted array• We want to determine if a particular

element is in the array– Once found, print or return

(index, boolean, etc.)– If not found, indicate the element

is not in the collection

7 12 42 59 71 86 104 212

Page 120: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

A Better Search

• Of course we could use our simpler search and traverse the array

• But we can use the fact that the array is sorted to our advantage

• This will allow us to reduce the number of comparisons

Page 121: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search

• Requires a sorted array or a binary search tree.

• Cuts the “search space” in half each time.• Keeps cutting the search space in half

until the target is found or has exhausted the all possible locations.

• Inappropriate for linked lists because linked lists lack random access.

Page 122: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Algorithm

look at “middle” element

if no match then

look left or right

1 7 9 12 33 42 59 76 81 84 91 92 93 99

Page 123: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Algorithm

look at “middle” element

if no match then

look left or right

1 7 9 12 33 42 59 76 81 84 91 92 93 99

Page 124: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Algorithm

look at “middle” element

if no match then

look left or right

1 7 9 12 33 42 59 76 81 84 91 92 93 99

Page 125: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Algorithm

look at “middle” element

if no match then

look left or right

1 7 9 12 33 42 59 76 81 84 91 92 93 99

Page 126: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Binary Search Algorithm

• Return found or not found (true or false), so it should be a function.

• We’ll use recursion• We must pass the entire array into the

module each pass, so set bounds (search space) via index bounds (parameters)–We’ll need a first and last

Page 127: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Binary Search Algorithm

calculate middle position

if (first and last have “crossed”) then

DO NOT FOUND WORK

elseif (element at middle = to_find) then

DO FOUND WORK

elseif to_find < element at middle then

Look to the left

else

Look to the right

Page 128: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Looking Left

• Use indices “first” and “last” to keep track of where we are looking

• Move left by setting last = middle – 1

7 12 42 59 71 86 104 212

F LML

Page 129: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Looking Right

• Use indices “first” and “last” to keep track of where we are looking

• Move right by setting first = middle + 1

7 12 42 59 71 86 104 212

F LM F

Page 130: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search Example – Found

7 12 42 59 71 86 104 212

Looking for 42

F LM

Page 131: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search Example – Found

7 12 42 59 71 86 104 212

Looking for 42

F LM

Page 132: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search Example – Found

7 12 42 59 71 86 104 212

42 found – in 3 comparisons

F

LM

Page 133: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search Example – Not Found

7 12 42 59 71 86 104 212

Looking for 89

F LM

Page 134: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search Example – Not Found

7 12 42 59 71 86 104 212

Looking for 89

F LM

Page 135: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search Example – Not Found

7 12 42 59 71 86 104 212

Looking for 89

F L

M

Page 136: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Binary Search Example – Not Found

7 12 42 59 71 86 104 212

89 not found – 3 comparisons

FL

Page 137: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Function Find returnsa boolean (A isoftype in ArrayType, first, last, to_find isoftype in num)

// contract (Pre, Post, Purpose) here

middle isoftype num

middle <- (first + last) div 2

if (first > last) then

Find returns false

elseif (A[middle] = to_find) then

Find returns true

elseif (to_find < A[middle]) then

Find returns Find(A, first, middle–1, to_find)

else

Find returns Find(A, middle+1, last, to_find)

endfunction

Page 138: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Summary

• Binary search reduces the work by half at each comparison

• With the array, we need to keep track of which “part” is currently “visible”

• We know the element isn’t in the array when our first and last indices “cross”

Page 139: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Questions?

Page 140: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Data Structure Conversionand Helper Modules

Page 141: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Scenario

• Imagine you have a collection of data stored in a linked list.

• But now you need to store this data in a binary search tree.

• You’ll need to convert the data from one structure to the other without altering the data itself.

Page 142: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Example: List to Tree

Page 143: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Purpose of Structure Conversion

Given the input data arranged in one format:

• Keep the original data andstructure intact

• Return the same data, but arrangedin a different order or within a different data structure

Page 144: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Conversion Examples

• Linked List to a Binary Search Tree• Binary Search Tree to a Sorted Linked List• Array to a Linked List• Array to a Binary Search Tree

Any others are also valid, but going from a dynamic structure to a static structure may run out of allocated space.

Page 145: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Steps Involved

• Initialize the new structure• Traverse the original structure– At each element, insert the current

element into the new structure• Return the new structure

Note that the original structure and data is unchanged.

Page 146: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

An Example: List to Tree

9

10

60

77

3

42

11

15

Page 147: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Initialize the New Structure

Head

9

10

60

77

3

42

11

15

Page 148: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

Page 149: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

11

Page 150: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

11

42

Page 151: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

11

42

9

Page 152: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

11

42

9

10

Page 153: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

11

42

9

10

60

Page 154: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

11

42

9

10

60

77

Page 155: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Traverse the Original Structure and Insert into

the New Structure

Head

159

10

60

77

3

42

11

15

11

42

9

10

60

773

Page 156: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Done TraversingNow Return the New Structure

Head

159

10

60

77

3

42

11

15

11

42

9

10

60

773

Page 157: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Needed Modules

• A module to initialize the new structure• A module to traverse the initial structure • A module to insert an element into the

new structure

• But all of this should betransparent to the user!

Page 158: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Helper Modules

• In order to correctly perform some tasks, helper modules are often necessary.

• Helper (or wrapper) modules are other modules that help in the completion of a task.

• They are often useful in hiding details.

Page 159: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Conversion Helper Modules

Convert

OriginalStructure

NewStructure

Page 160: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The Conversion Helper Modules

Convert

Initialize

OriginalStructure

NewStructure

Traverse Original

Insert into New

Page 161: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

A First Try at the Conversion Module

procedure Tree_from_List(cur isoftype in Ptr toa List_Node, head isoftype in/out Ptr toa Tree_Node )

// Pre: head initialized to NIL

if( cur <> NIL ) then

BST_Insert(head, cur^.data )

Tree_from_List(cur^.next, head )

endif

endprocedure

Page 162: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

A First Try at the Algorithm

algorithm ListToTree // some delcarations TreePtr isoftype Ptr toa Tree_Node ListPtr isoftype Ptr toa List_Node // build the list work here TreePtr <- NIL Tree_from_List( ListPtr, TreePtr ) // now the tree is builtendalgorithm // ListToTree

The user is required to initialize the list pointer.It is better to wrap the recursive call into a user

interface program as follows…

Page 163: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

A Better Main Algorithm

The initialization should be hidden inside the conversion module itself.

algorithm BetterListToTree TreePtr isoftype Ptr toa Tree_Node ListPtr isoftype Ptr toa List_Node

// build the list work is here

Nice_Tree_from_List( ListPtr, TreePtr ) // now the tree is built

endalgorithm // BetterListToTree

Page 164: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

The “Wrapper” Module

procedure Nice_Tree_from_List( cur isoftype in Ptr toa List_Node, head isoftype out Ptr toa Tree_Node )

// perform the initialization head <- NIL

// build the list Tree_From_List( cur, head )endprocedure

Page 165: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Summary

• Keep the original structure unchanged• Initialize the new structure• Traverse the old structure– Insert each element into the new structure

• Helper (wrapper) modules– Help hide details– Properly abstract tasks into

separate modules

Page 166: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules

Questions?

Page 167: Searching via Traversals Searching a Binary Search Tree (BST) Binary Search on a Sorted Array Data Structure Conversion and Helper Modules