Upload
richard-jackson
View
224
Download
0
Tags:
Embed Size (px)
Citation preview
1
Binary Search Trees
Slides by Sylvia Sorkin, Community College of Baltimore County - Essex Campus
and Rpbert Moyer, Montgomery County Community College
2
Jake’s Pizza Shop
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
3
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
A Tree Has a Root Node
ROOT NODE
4
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
Leaf nodes have no children
LEAF NODES
5
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
A Tree Has Levels
LEVEL 0
6
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
Level One
LEVEL 1
7
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
Level Two
LEVEL 2
8
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
A Subtree
LEFT SUBTREE OF ROOT NODE
9
Owner Jake
Manager Chef Brad Carol
Waitress Waiter Cook Helper Joyce Chris Max Len
Another Subtree
RIGHT SUBTREE OF ROOT NODE
10
A binary tree is a structure in which:
Each node can have at most two children, and in which a unique path exists from the root to every other node.
The two children of a node are called the left child and the right child, if they exist.
Binary Tree
16
Each node contains two pointers
template< class ItemType >struct TreeNode {
ItemType info; // Data member
TreeNode<ItemType>* left; // Pointer to left child
TreeNode<ItemType>* right; // Pointer to right child
};
. left . info . right
NULL ‘A’ 6000
// BINARY SEARCH TREE SPECIFICATION
template< class ItemType >
class TreeType { public:
TreeType ( ); // constructor ~TreeType ( ); // destructor bool IsEmpty ( ) const; bool IsFull ( ) const; int NumberOfNodes ( ) const; void InsertItem ( ItemType item ); void DeleteItem (ItemType item ); void RetrieveItem ( ItemType& item, bool& found ); void PrintTree (ofstream& outFile) const;
. . .
private:
TreeNode<ItemType>* root;}; 17
18
TreeType<char> CharBST;
‘J’
‘E’
‘A’
‘S’
‘H’
TreeType
~TreeType
IsEmpty
InsertItem
Private data:
root
RetrieveItem
PrintTree . . .
19
A special kind of binary tree in which:
1. Each node contains a distinct data value,
2. The key values in the tree can be compared using “greater than” and “less than”, and
3. The key value of each node in the tree is
less than every key value in its right subtree, and greater than every key value in its left subtree.
A Binary Search Tree (BST) is . . .
20
Depends on its key values and their order of insertion.
Insert the elements ‘J’ ‘E’ ‘F’ ‘T’ ‘A’ in that order.
The first value to be inserted is put into the root node.
Shape of a binary search tree . . .
‘J’
21
Thereafter, each value to be inserted begins by comparing itself to the value in the root node, moving left it is less, or moving right if it is greater. This continues at each level until it can be inserted as a new leaf.
Inserting ‘E’ into the BST
‘J’
‘E’
22
Begin by comparing ‘F’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.
Inserting ‘F’ into the BST
‘J’
‘E’
‘F’
23
Begin by comparing ‘T’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.
Inserting ‘T’ into the BST
‘J’
‘E’
‘F’
‘T’
24
Begin by comparing ‘A’ to the value in the root node, moving left it is less, or moving right if it is greater. This continues until it can be inserted as a leaf.
Inserting ‘A’ into the BST
‘J’
‘E’
‘F’
‘T’
‘A’
25
is obtained by inserting
the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order?
What binary search tree . . .
‘A’
26
obtained by inserting
the elements ‘A’ ‘E’ ‘F’ ‘J’ ‘T’ in that order.
Binary search tree . . .
‘A’
‘E’
‘F’
‘J’
‘T’
27
Another binary search tree
Add nodes containing these values in this order:
‘D’ ‘B’ ‘L’ ‘Q’ ‘S’ ‘V’ ‘Z’
‘J’
‘E’
‘A’ ‘H’
‘T’
‘M’
‘K’ ‘P’
// BINARY SEARCH TREE SPECIFICATION
template< class ItemType >
class TreeType { public:
TreeType ( ) ; // constructor ~TreeType ( ) ; // destructor bool IsEmpty ( ) const ; bool IsFull ( ) const ; int NumberOfNodes ( ) const ; void InsertItem ( ItemType item ) ; void DeleteItem (ItemType item ) ; void RetrieveItem ( ItemType& item , bool& found ) ; void PrintTree (ofstream& outFile) const ;
. . .
private:
TreeNode<ItemType>* root ;}; 29
// SPECIFICATION (continued) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// RECURSIVE PARTNERS OF MEMBER FUNCTIONS
template< class ItemType >void PrintHelper ( TreeNode<ItemType>* ptr,
ofstream& outFile ) ;
template< class ItemType > void InsertHelper ( TreeNode<ItemType>*& ptr,
ItemType item ) ;
template< class ItemType > void RetrieveHelper ( TreeNode<ItemType>* ptr,
ItemType& item, bool& found ) ;
template< class ItemType > void DestroyHelper ( TreeNode<ItemType>* ptr ) ;
30
// BINARY SEARCH TREE IMPLEMENTATION // OF MEMBER FUNCTIONS AND THEIR HELPER FUNCTIONS
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - template< class ItemType > TreeType<ItemType> :: TreeType ( ) // constructor { root = NULL ;}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -template< class ItemType >bool TreeType<ItemType> :: IsEmpty( ) const{ return ( root == NULL ) ;}
31
template< class ItemType > void TreeType<ItemType> :: RetrieveItem ( ItemType& item,
bool& found ){ RetrieveHelper ( root, item, found ) ; }
template< class ItemType > void RetrieveHelper ( TreeNode<ItemType>* ptr, ItemType& item,
bool& found){ if ( ptr == NULL )
found = false ; else if ( item < ptr->info ) // GO LEFT
RetrieveHelper( ptr->left , item, found ) ; else if ( item > ptr->info ) // GO RIGHT
RetrieveHelper( ptr->right , item, found ) ; else { item = ptr->info ;
found = true ; }}
32
template< class ItemType > void TreeType<ItemType> :: InsertItem ( ItemType item ){
InsertHelper ( root, item ) ; }
template< class ItemType > void InsertHelper ( TreeNode<ItemType>*& ptr, ItemType item ){ if ( ptr == NULL ) { // INSERT item HERE AS LEAF
ptr = new TreeNode<ItemType> ;ptr->right = NULL ;ptr->left = NULL ;ptr->info = item ;
} else if ( item < ptr->info ) // GO LEFT
InsertHelper( ptr->left , item ) ; else if ( item > ptr->info ) // GO RIGHT
InsertHelper( ptr->right , item ) ;} 33
34
Inorder Traversal: A E H J M T Y
‘J’
‘E’
‘A’ ‘H’
‘T’
‘M’ ‘Y’
tree
Print left subtree first Print right subtree last
Print second
// INORDER TRAVERSALtemplate< class ItemType >void TreeType<ItemType> :: PrintTree ( ofstream& outFile ) const{
PrintHelper ( root, outFile ) ; }
template< class ItemType > void PrintHelper ( TreeNode<ItemType>* ptr, ofstream& outFile ){ if ( ptr != NULL ) {
PrintHelper( ptr->left , outFile ) ; // Print left subtree
outFile << ptr->info ;
PrintHelper( ptr->right, outFile ) ; // Print right subtree
}} 35
36
Preorder Traversal: J E A H T M Y
‘J’
‘E’
‘A’ ‘H’
‘T’
‘M’ ‘Y’
tree
Print left subtree second Print right subtree last
Print first
37
‘J’
‘E’
‘A’ ‘H’
‘T’
‘M’ ‘Y’
tree
Print left subtree first Print right subtree second
Print last
Postorder Traversal: A H E M Y T J
template< class ItemType > TreeType<ItemType> :: ~TreeType ( ) // DESTRUCTOR{ DestroyHelper ( root ) ; }
template< class ItemType > void DestroyHelper ( TreeNode<ItemType>* ptr )// Post: All nodes of the tree pointed to by ptr are deallocated.
{ if ( ptr != NULL ) {
DestroyHelper ( ptr->left ) ;DestroyHelper ( ptr->right ) ;delete ptr ;
}}
38