Question: For this computer assignment using c++ implement a derived class to represent a binary search tree. Since a binary search tree is also a binary
For this computer assignment using c++ implement a derived class to represent a binary search tree. Since a binary search tree is also a binary tree, implement your binary search tree class from the base class of binary trees. Implement the following functions in to the code that is provided. The above public functions simply call their private versions. The private versions of insert (), remove (), search() and sumOfRange () functions can be implemented as recursive functions. You can assume there are no identical numbers to be inserted into the tree.
#include
#include
#include
#include
using namespace std;
static const int SEARCH_LOW = 20;
static const int SEARCH_HIGH = 30;
static const int MAX_COUNT = 20;
static int mcount = 0;
class BST : public binTree
{
public:
BST() : binTree() {}
void insert(int);
bool search(int);
bool remove(int);
int sumOfRange(int lower, const int upper);
private:
void insert(Node*&, int);
bool search(Node*&, int);
bool remove(Node*&, int);
int sumOfRange(Node*& n, const int lower, const int upper);
};
void display2(int d) {
if (mcount < MAX_COUNT) {
cout << setw(4) << d;
mcount++;
}
}
// produce a random number within range [1 1000]
int rand_1000() {
return rand() % 1000 + 1;
}
void show_tree_information(BST& bst) {
cout << "Size of the tree: " << bst.size() << endl;
cout << "Height of the tree: " << bst.height() << endl;
cout << "In order traverse (displaying first " << MAX_COUNT << " numbers): " << endl;
mcount = 0;
bst.inorder(display2);
cout << " Pre order traverse (displaying first " << MAX_COUNT << " numbers): " << endl;
mcount = 0;
bst.preorder(display2);
cout << " Post order traverse (displaying first " << MAX_COUNT << " numbers): " << endl;
mcount = 0;
bst.postorder(display2);
}
// For each value in searchVec, search it in the binary search tree
// and report the number of successful searches
void run_search(BST& bst, vector
int success = 0;
vector
for (it = searchVec.begin(); it != searchVec.end(); it++)
if (bst.search(*it))
success++;
cout << endl << endl << "Out of " << searchVec.size() << " searches, " << success << " are successful." << endl << endl;
}
int main() {
//-------------- Create a B.S.T. using unique random numbers -----------
vector
srand(7);
generate(inputVec.begin(), inputVec.end(), rand_1000);
sort(inputVec.begin(), inputVec.end());
vector
inputVec.resize(it - inputVec.begin());
random_shuffle(inputVec.begin(), inputVec.end());
BST bst;
for (it = inputVec.begin(); it != inputVec.end(); it++)
bst.insert(*it);
cout << "A binary search tree is generated with random numbers: " << endl;
show_tree_information(bst);
//-------------- Create a vector of random integers to be searched ------
vector
srand(11);
generate(searchVec.begin(), searchVec.end(), rand_1000);
//cout << endl << endl << "Sum of range: " << bst.sumOfRange(SEARCH_LOW, SEARCH_HIGH) << endl;
//------------ test search operations ----------------
run_search(bst, searchVec);
//------------ remove half of nodes from the tree ---------
int counter = 0;
random_shuffle(inputVec.begin(), inputVec.end());
for (it = inputVec.begin(); it < inputVec.end(); it += 2) {
if (bst.remove(*it))
counter++;
}
cout << endl << counter << " nodes are removed." << endl << endl;
show_tree_information(bst);
cout << endl << endl << "Sum of range between " << SEARCH_LOW << " and "
<< SEARCH_HIGH << " : " << bst.sumOfRange(SEARCH_LOW, SEARCH_HIGH) << endl;
//-------------- test search operations again ---------------
run_search(bst, searchVec);
return 0;
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
