Answered step by step
Verified Expert Solution
Link Copied!
Question
1 Approved Answer

Data Structure and Algorithm Analysis ---COP3530 Program Module 11 Total Points 100 After completing this assignment you will be able to implement a binary search

Data Structure and Algorithm Analysis---COP3530

Program Module 11

Total Points 100

After completing this assignment you will be able to implement a binary search tree (BST).

Name the program for this assignment "bst_driver.cpp." In this assignment you will make several modifications to the BST class in the file bst.cpp that I provided. Consider the following:

1. Change the declaration of treenode to

class treenode //node in a BST

{

public:

string county_name;

double population_size;

treenode *lchild, *rchild; //left and right children pointers

};

2. Make the following changes to the BST class:

change the name from BST to bst;

change default constructor from BST to bst;

leave empty as is;

leave insert as is;

change name of insert_aux to insert;

change name del to del_name;

change name of del_aux to del_name with a different signature than f above;

leave search_tree as is;

change name of search_tree_aux to search_tree;

leave inorder_succ as is;

leave print_tree as is;

change name of print_tree_aux to print_tree.

leave private area (the state) as is;

consider the following class declaration:

class bst

{

public:

bst (); //store the data file (county_data.txt) into initial bst

~bst();//de-allocates dynamic memory allocate for tree

bool empty(); // checks to see if the tree is empty

void insert(const string & item, const double & population); //inserts a county record into bst based on

//county_name.

void insert(treenode * &, string item); //see insert description above

void del_name(string item); //deletes a county record based on county name.

void del_name(treenode * & loc_ptr, string item); //see del description above

treenode * search_tree(treenode *,string item);//returns pointer to node with county name

treenode * search_tree(string item); //see search_tree description above

treenode * inorder_succ(treenode *);//return pointer to inorder successor (based on population

//size;

void population_ranges(const double& min_size, const double & max_size); //prints all county names

//o the screen with a population size between min_size and max_size.

void sorted_info( );//prints each county record to a file called county_info.txt sorted by county

//name.

void print_tree(); //prints the node in the bst in numerical order based on the population size

void print_tree(treenode *);//see description above

private:

treenode *root;

};

3. Notes on implementation of population_ranges, sorted_info, del_population, and del_name are as follows:

The void member function population_ranges that accepts two values that represents a population size range and prints all the counties with a population size in the range. Consider the following prototype:

void population_ranges(const double& min_size, const double & max_size);

The void member function sorted_info that has no formal parameters. This function will print the county information (name and population) to the file county_info.txt. Consider the following prototype that goes inside the class declaration:

void sorted_info( );

void del_name(string item) deletes a county record based on county name. This function is called from main. Remember the tree is sorted (based) on county name

void del_name(treenode * & loc_ptr, string item) is an auxiliary function to help delete a county record based on county name. It is a member function that can only be called by another member of the class.

All the data for this program is stored in the file county_data.txt. The county name is listed first, followed by the population size. Separate the class declaration and implementation files. Call the header (declaration) for the bst, bst.h and the implementation file, bst.cpp. Call the driver, bst_driver.cpp.

Please submit your files in a zip file called unit12.zip before the due date and time. Please start early, and let me know if you have any questions.

Bst-1.cpp

/* This is a simple program to give the student experience writing code for binary trees. This is a CLASS implementation of the BST ADT. The student should study, comment, correct errors, compile, implement/un-implemented/undeveloped functions, and modify code to make it more efficient when ever necessary. The student should be able to discuss the advantages and disadvantages of using such an implementation. */

#include #include

using namespace std;

class treenode { public: string info; treenode *lchild, *rchild; };

class BST { public: BST(){root=0;} ~BST(); bool empty(); void insert(string item); void insert_aux(treenode * &, string item); void del(string item); void del_aux(treenode * & loc_ptr, string item); treenode * search_tree_aux(treenode *,string item); treenode * search_tree(string item); treenode * inorder_succ(treenode *); treenode * parent(); void print_tree(); void print_tree_aux(treenode *);

private: treenode *root;

};

bool BST::empty() { return (root==0); }

void BST::insert(string item) { insert_aux(root,item); } void BST::insert_aux(treenode * & loc_ptr,string item) { if (loc_ptr==0) { loc_ptr = new treenode; loc_ptr->lchild=loc_ptr->rchild=0; loc_ptr->info=item; } else if (loc_ptr->info>item) insert_aux(loc_ptr->lchild,item); else if (loc_ptr->inforchild,item); else cout<<"the item is already in the tree "; }

treenode * BST::search_tree(string item) { return search_tree_aux(root, item); }

treenode * BST::search_tree_aux(treenode * loc_ptr, string item) { if (loc_ptr!=0) { if(loc_ptr->info==item) return loc_ptr; else if (loc_ptr->info>item) return search_tree_aux(loc_ptr->lchild,item); else return search_tree_aux(loc_ptr->rchild,item); } else return loc_ptr; }

void BST::del(string item) { del_aux(root,item); }

void BST::del_aux(treenode * & loc_ptr, string item) {

if (loc_ptr==0) cout<<"item not in tree ";

else if (loc_ptr->info > item) del_aux(loc_ptr->lchild, item);

else if (loc_ptr->info < item) del_aux(loc_ptr->rchild, item); else { treenode * ptr;

if (loc_ptr->lchild == 0) { ptr=loc_ptr->rchild; delete loc_ptr; loc_ptr=ptr; } else if (loc_ptr->rchild == 0) { ptr=loc_ptr->lchild; delete loc_ptr; loc_ptr=ptr; } else { ptr=inorder_succ(loc_ptr); loc_ptr->info = ptr->info; del_aux(loc_ptr->rchild, ptr->info); } }

}

treenode * BST::inorder_succ(treenode * loc_ptr) {

treenode *ptr=loc_ptr->rchild;

while(ptr->lchild!=0) { ptr=ptr->lchild; } return ptr; } void BST::print_tree() { print_tree_aux(root); }

void BST::print_tree_aux(treenode * loc_ptr) { if (loc_ptr!=0) { print_tree_aux(loc_ptr->lchild); cout<info<rchild); } }

BST::~BST() { while (root!=0) { del(root->info); } }

int main() { BST B; //treenode *root1=0, *root2=0; string s; char ch; string key3; string key4; string response; string r1, r2; cout<<"enter command, c=count, i=insert item,s=search tree,d=delete item,p=print tree, r = range, e=exit: "; cin>>ch; cout<

while (ch!='e') { switch (ch) { case 'i' :cout<<"enter string: "; cin>>s; B.insert(s); break; case 's' :cout<<"enter word to search for: "; cin>>s; if (!B.search_tree(s)) cout<>s; B.del(s); break; case 'p' :cout<<"...printing tree... "; B.print_tree(); break; default:break; } cout<<"enter command, i=insert item,s=search tree,d=delete item,p=print tree, e=exit: "; cin>>ch; cout<

Bst_driver.cpp

int main( ) {

cout<<"Test1: default constructor "; bst myTree;

myTree.print_tree(); cout<<"End Test1 ";

cout<<"Test2:insert "; myTree.insert("new-county", 234658); myTree.print_tree(); cout<<"End Test2 ";

cout<<"Test3: population_ranges "; myTree.population_ranges(0,50000); cout<<"End Test3 ";

cout<<"Test4: del_name "; myTree.del_name("miami-dade"); cout<<"End Test5 ";

cout<<"Test5: sorted_info "; myTree.sorted_info(); cout<<"End Test6 ";

return 0; }

county Data-txt:

Alachua 249365 Baker 27154 Bay 169856 Bradford 28255 Brevard 543566 Broward 1780172 Calhoun 14750 Charlotte 160511 Citrus 140031 Clay 192970 Collier 328134 Columbia 67485 DeSoto 34894 Dixie 16486 Duval 870709 Escambia 299114 Flagler 97376 Franklin 11596 Gadsden 46151 Gilchrist 17004 Glades 12635 Gulf 15844 Hamilton 14671 Hardee 27887 Hendry 39089 Hernando 173094 Highlands 98630 Hillsborough 1267775 Holmes 19873 Indian River 138894 Jackson 49292 Jefferson 14658 Lafayette 8942 Lake 301019 Lee 631330 Leon 277971 Levy 40156 Liberty 8314 Madison 19115 Manatee 327142 Marion 332529 Martin 147495 Miami-Dade 2662874 Monroe 73873 Nassau 74195 Okaloosa 183482 Okeechobee 40140 Orange 1169107 Osceola 276163 Palm Beach 1335187 Pasco 466457 Pinellas 917398 Polk 609492 Putnam 74041 Santa Rosa 154104 Sarasota 38213 Seminole 425071 St. Johns 195823 St. Lucie 280379 Sumter 97756 Suwannee 41972 Taylor 22691 Union 15388 Volusia 494804 Wakulla 30978 Walton 55793 Washington 24935

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image
Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Inductive Databases And Constraint Based Data Mining

Authors: Saso Dzeroski ,Bart Goethals ,Pance Panov

2010th Edition

1489982175, 978-1489982179

More Books

Students explore these related Databases questions

Question

=+Understand the fi eld of comparative IHRM.

Answered: 3 weeks ago