The definition for binary search tree should be the one used in class Class definition:                                                                       A BST is a binary tree that (if not empty) also follows two storage rules regarding its nodes’ items:       ♯ For any node n of the tree, every item in n’s left subtree (LST), if not empty, is less than the item in n ♯       ♯ For any node n of the tree, every item in n’s right subtree (RST), if not empty, is greater than the item in n ● bst_insert must be iterative (NOT recursive). ● bst_remove and bst_remove_max must use the algorithm described by the suggested book authors  In btNode.h: provide prototypes for bst_insert, bst_remove and bst_remove_max.   ● In btNode.cpp: provide definition (implementation) for bst_insert, bst_remove and bst_remove_ma     ► Do make gogo (after successful compilation or re-compilation) to test with result (excluding progress-logging messages) output to file (a6p2.out) #ifndef BT_NODE_H #define BT_NODE_H struct btNode {    int data;    btNode* left;    btNode* right; }; // pre:  bst_root is root pointer of a binary search tree (may be 0 for //       empty tree) and portArray has the base address of an array large //       enough to hold all the data items in the binary search tree // post: The binary search tree has been traversed in-order and the data //       values are written (as they are encountered) to portArray in //       increasing positional order starting from the first element void portToArrayInOrder(btNode* bst_root, int* portArray); void portToArrayInOrderAux(btNode* bst_root, int* portArray, int& portIndex); // pre:  (none) // post: dynamic memory of all the nodes of the tree rooted at root has been //       freed up (returned back to heap/freestore) and the tree is now empty //       (root pointer contains the null address) void tree_clear(btNode*& root); // pre:  (none) // post: # of nodes contained in tree rooted at root is returned int bst_size(btNode* bst_root); // pre:  bst_root is root pointer of a binary search tree (may be 0 for //       empty tree) // post: If no node in the binary search tree has data equals insInt, a //       node with data insInt has been created and inserted at the proper //       location in the tree to maintain binary search tree property. //       If a node with data equals insInt is found, the node's data field //       has been overwritten with insInt; no new node has been created. //       (Latter case seems odd but it's to mimick update of key-associated //       data that exists in more general/real-world situations.) // write prototype for bst_insert here // pre:  bst_root is root pointer of a binary search tree (may be 0 for //       empty tree) // post: If remInt was in the tree, then remInt has been removed, bst_root //       now points to the root of the new (smaller) binary search tree, //       and the function returns true. Otherwise, if remInt was not in the //       tree, then the tree is unchanged, and the function returns false. // write prototype for bst_remove here // pre:  bst_root is root pointer of a non-empty binary search tree // post: The largest item in the binary search tree has been removed, and //       bst_root now points to the root of the new (smaller) binary search //       tree. The reference parameter, removed, has been set to a copy of //       the removed item. // write prototype for bst_remove_max here #endif // write definition for bst_insert here // write definition for bst_remove here // write definition for bst_remove_max here void portToArrayInOrder(btNode* bst_root, int* portArray) {    if (bst_root == 0) return;    int portIndex = 0;    portToArrayInOrderAux(bst_root, portArray, portIndex); } void portToArrayInOrderAux(btNode* bst_root, int* portArray, int& portIndex) {    if (bst_root == 0) return;    portToArrayInOrderAux(bst_root->left, portArray, portIndex);    portArray[portIndex++] = bst_root->data;    portToArrayInOrderAux(bst_root->right, portArray, portIndex); } void tree_clear(btNode*& root) {    if (root == 0) return;    tree_clear(root->left);    tree_clear(root->right);    delete root;    root = 0; } int bst_size(btNode* bst_root) {    if (bst_root == 0) return 0;    return 1 + bst_size(bst_root->left) + bst_size(bst_root->right);

Programming Logic & Design Comprehensive
9th Edition
ISBN:9781337669405
Author:FARRELL
Publisher:FARRELL
Chapter8: Advanced Data Handling Concepts
Section: Chapter Questions
Problem 10RQ
icon
Related questions
Question

The definition for binary search tree should be the one used in class

Class definition:                                                                  

    A BST is a binary tree that (if not empty) also follows two storage rules regarding its nodes’ items:  
    For any node n of the tree, every item in n’s left subtree (LST), if not empty, is less than the item in n  
    For any node n of the tree, every item in n’s right subtree (RST), if not empty, is greater than the item in n
bst_insert must be iterative (NOT recursive).
bst_remove and bst_remove_max must use the algorithm described by the suggested book authors 
In btNode.h: provide prototypes for bst_insertbst_remove and bst_remove_max.
  In btNode.cpp: provide definition (implementation) for bst_insertbst_remove and bst_remove_ma
    Do make gogo (after successful compilation or re-compilation) to test with result (excluding progress-logging messages) output to file (a6p2.out)

#ifndef BT_NODE_H
#define BT_NODE_H

struct btNode
{
   int data;
   btNode* left;
   btNode* right;
};
// pre:  bst_root is root pointer of a binary search tree (may be 0 for
//       empty tree) and portArray has the base address of an array large
//       enough to hold all the data items in the binary search tree
// post: The binary search tree has been traversed in-order and the data
//       values are written (as they are encountered) to portArray in
//       increasing positional order starting from the first element
void portToArrayInOrder(btNode* bst_root, int* portArray);
void portToArrayInOrderAux(btNode* bst_root, int* portArray, int& portIndex);

// pre:  (none)
// post: dynamic memory of all the nodes of the tree rooted at root has been
//       freed up (returned back to heap/freestore) and the tree is now empty
//       (root pointer contains the null address)
void tree_clear(btNode*& root);

// pre:  (none)
// post: # of nodes contained in tree rooted at root is returned
int bst_size(btNode* bst_root);

// pre:  bst_root is root pointer of a binary search tree (may be 0 for
//       empty tree)
// post: If no node in the binary search tree has data equals insInt, a
//       node with data insInt has been created and inserted at the proper
//       location in the tree to maintain binary search tree property.
//       If a node with data equals insInt is found, the node's data field
//       has been overwritten with insInt; no new node has been created.
//       (Latter case seems odd but it's to mimick update of key-associated
//       data that exists in more general/real-world situations.)

// write prototype for bst_insert here
// pre:  bst_root is root pointer of a binary search tree (may be 0 for
//       empty tree)
// post: If remInt was in the tree, then remInt has been removed, bst_root
//       now points to the root of the new (smaller) binary search tree,
//       and the function returns true. Otherwise, if remInt was not in the
//       tree, then the tree is unchanged, and the function returns false.

// write prototype for bst_remove here
// pre:  bst_root is root pointer of a non-empty binary search tree
// post: The largest item in the binary search tree has been removed, and
//       bst_root now points to the root of the new (smaller) binary search
//       tree. The reference parameter, removed, has been set to a copy of
//       the removed item.

// write prototype for bst_remove_max here

#endif

// write definition for bst_insert here

// write definition for bst_remove here

// write definition for bst_remove_max here


void portToArrayInOrder(btNode* bst_root, int* portArray)
{
   if (bst_root == 0) return;
   int portIndex = 0;
   portToArrayInOrderAux(bst_root, portArray, portIndex);
}

void portToArrayInOrderAux(btNode* bst_root, int* portArray, int& portIndex)
{
   if (bst_root == 0) return;
   portToArrayInOrderAux(bst_root->left, portArray, portIndex);
   portArray[portIndex++] = bst_root->data;
   portToArrayInOrderAux(bst_root->right, portArray, portIndex);
}

void tree_clear(btNode*& root)
{
   if (root == 0) return;
   tree_clear(root->left);
   tree_clear(root->right);
   delete root;
   root = 0;
}

int bst_size(btNode* bst_root)
{
   if (bst_root == 0) return 0;
   return 1 + bst_size(bst_root->left) + bst_size(bst_root->right);

attempt to remove 1 values below:
(sequential order) 8
(value-sort
order) 8
from 12 values below:
-9 -8 -7 -6 -4 -3 -1 1 3 4 59
gives (with 0 values successfully removed)
-9 -8 -7 -6 -4 -3 -1 1 3 459
test case 5 of 990000
attempt to remove 8 values below:
(sequential order) 4 -6 4 2 -9 7 -7 5
(value-sort order) -9 -7 -6 2 4 457
from 9 values below:
-8 -5 -4 -2 12 389
gives (with 1 values successfully removed)
-8 -5 -4 -2 1 3 89
test case 66000 of 990000
attempt to remove 3 values below:
(sequential order) 1 -1 7
(value-sort order) -1 1 7
from 4 values below:
-5 -3 0 8
gives (with values successfully removed)
-5 -3 08
test case 132000 of 990000
attempt to remove 8 values below:
(sequential order) 7 6 -3 5 -1 -4 2 1
Transcribed Image Text:attempt to remove 1 values below: (sequential order) 8 (value-sort order) 8 from 12 values below: -9 -8 -7 -6 -4 -3 -1 1 3 4 59 gives (with 0 values successfully removed) -9 -8 -7 -6 -4 -3 -1 1 3 459 test case 5 of 990000 attempt to remove 8 values below: (sequential order) 4 -6 4 2 -9 7 -7 5 (value-sort order) -9 -7 -6 2 4 457 from 9 values below: -8 -5 -4 -2 12 389 gives (with 1 values successfully removed) -8 -5 -4 -2 1 3 89 test case 66000 of 990000 attempt to remove 3 values below: (sequential order) 1 -1 7 (value-sort order) -1 1 7 from 4 values below: -5 -3 0 8 gives (with values successfully removed) -5 -3 08 test case 132000 of 990000 attempt to remove 8 values below: (sequential order) 7 6 -3 5 -1 -4 2 1
a6p2test.out X
test case 1 of 990000
attempt to remove 5 values below:
(sequential order) -2 8 -4 0 1
(value-sort order) -4 -2 0 1 8
from 8 values below:
-8 -7 -6 -2 -1 0 1 2
gives (with 3 values successfully removed)
-8 -7 -6 -1 2
test case 2 of 990000
attempt to remove 7 values below:
(sequential order) 8 -3 -5 -4 5 6 4
(value-sort order) -5 -4 -3 4 5 6 8
from 6 values below:
-8 -5 -4 -3 -2 3
gives (with 3 values successfully removed)
-8 -2 3
test case 3 of 990000
attempt to remove 5 values below:
(sequential order) 4 -6 -4 -1 6
(value-sort order) -6 -4 -1 46
from 11 values below:
=====
-8 -7 -6 -5 -4 -2 -1 0 5 6 7
gives (with 4 values successfully removed)
-8 -7 -5 -2 0 57
=====
test case 4 of 990000
=====
Transcribed Image Text:a6p2test.out X test case 1 of 990000 attempt to remove 5 values below: (sequential order) -2 8 -4 0 1 (value-sort order) -4 -2 0 1 8 from 8 values below: -8 -7 -6 -2 -1 0 1 2 gives (with 3 values successfully removed) -8 -7 -6 -1 2 test case 2 of 990000 attempt to remove 7 values below: (sequential order) 8 -3 -5 -4 5 6 4 (value-sort order) -5 -4 -3 4 5 6 8 from 6 values below: -8 -5 -4 -3 -2 3 gives (with 3 values successfully removed) -8 -2 3 test case 3 of 990000 attempt to remove 5 values below: (sequential order) 4 -6 -4 -1 6 (value-sort order) -6 -4 -1 46 from 11 values below: ===== -8 -7 -6 -5 -4 -2 -1 0 5 6 7 gives (with 4 values successfully removed) -8 -7 -5 -2 0 57 ===== test case 4 of 990000 =====
Expert Solution
steps

Step by step

Solved in 3 steps

Blurred answer
Knowledge Booster
Time complexity
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Programming Logic & Design Comprehensive
Programming Logic & Design Comprehensive
Computer Science
ISBN:
9781337669405
Author:
FARRELL
Publisher:
Cengage