Advertisement
CHU2

Binary Search Tree

Feb 23rd, 2023
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.88 KB | Source Code | 0 0
  1. /*
  2. Laboratory activity:
  3. 1. Write a c++ program that sort the following numbers and build binary search tree with the root of 10.
  4.     Given:
  5.         {80, 20, 100, 10, 40, 90, 30, 50, 35}
  6.  
  7. 2. From problem 1, insert {65, 75, 15} into the tree.
  8.  
  9. 3. Draw the Binary Search Tree considering the data given from problem 1 and 2.
  10.  
  11. 4. from prob. 1 and 2, display the BST after deleting the level 2 parent node(s).
  12. */
  13.  
  14. #include <iostream>
  15. #include <queue>
  16. #include <iomanip>
  17.  
  18. using namespace std;
  19.  
  20. class node {
  21.     public:
  22.         int value;
  23.         node* left;
  24.         node* right;
  25.        
  26.         node (int nodevalue){
  27.             value = nodevalue;
  28.             left = NULL;
  29.             right = NULL;
  30.         }
  31. };
  32.  
  33. node* add(node*, int);
  34. void levelorder(node*);
  35. void bubblesorttrial(int arr[], int);
  36. void output(int arr[], const int);
  37. void searchlevel(node*);
  38. node* deletenode(node*, int);
  39.  
  40. int main (){
  41.     const int size = 9;
  42.     const int sizea = 3;
  43.     int valuearray[size] = {80, 20, 100, 10, 40, 90, 30, 50, 35};    //the given values
  44.     int addarray[sizea] = {65, 75, 15};    //given values to be inserted from problem 2
  45.    
  46.     cout << "\n The given values are: ";
  47.     output(valuearray, size);
  48.     cout << "\n The given values to be added are: ";
  49.      output(addarray, sizea);
  50.     bubblesorttrial(valuearray, size);    //bubblesorted array, a copypasta from the past lab activities
  51.     cout << "\n The given values after sort are: ";
  52.     output(valuearray, size);
  53.    
  54.     node* root = new node(valuearray[0]);    
  55.    
  56.     for (int h = 1; h < size; h++){
  57.         int value = valuearray[h];
  58.         add(root, value);
  59.     }
  60.    
  61.     cout << "\n The BST of the sorted values with the root of 10 are: ";
  62.     levelorder(root);
  63.    
  64.     for (int h = 0; h < sizea; h++){
  65.         int valuea = addarray[h];
  66.         add(root, valuea);
  67.     }
  68.    
  69.     cout << "\n The BST after adding the values are: ";
  70.     levelorder(root);
  71.     cout << "\n The BST after deleting the level 2 values are: ";
  72.     searchlevel(root);
  73.     levelorder(root);
  74.    
  75.     return 0;
  76. }
  77.  
  78. node* add(node* root, int value){
  79.     if (root == NULL) {
  80.         root = new node(value);
  81.     }
  82.     else if (value <= root->value){
  83.         root->left = add(root->left, value);
  84.     }
  85.     else if (value > root->value){
  86.         root->right = add(root->right, value);
  87.     }
  88.  
  89.     return root;
  90. }
  91.  
  92. void levelorder(node* root){
  93.     queue<node*> q;
  94.  
  95.     q.push(root);
  96.  
  97.     while (!q.empty()){
  98.         node* nodea = q.front();
  99.  
  100.         cout << nodea->value << setw(4);
  101.  
  102.         q.pop();
  103.  
  104.         if (nodea->left != NULL){
  105.             q.push(nodea->left);
  106.         }
  107.         if (nodea->right != NULL){    //for some reason, compiler skips this if its on "else if" condition
  108.             q.push(nodea->right);
  109.         }
  110.     }
  111. }
  112.  
  113. void bubblesorttrial(int arr[], int size){
  114.     int hold;
  115.     for (int pass = 1; pass < size - 1; pass ++){
  116.         for (int i = 0; i < size - 1; i ++){
  117.             if (arr[i] > arr[i + 1]){
  118.                 hold = arr[i];
  119.                 arr[i] = arr[i + 1];
  120.                 arr[i + 1] = hold;
  121.             }
  122.         }
  123.     }
  124. }
  125.  
  126. void output(int valuearray[], const int size){
  127.     for (int h = 0; h < size; h++){
  128.         cout << valuearray[h] << setw(4);
  129.     }
  130. }
  131.  
  132. void searchlevel(node* root){
  133.     queue<node*> q;
  134.     int h = 0;    //creates a tally rating
  135.    
  136.     q.push(root);
  137.    
  138.     while (!q.empty()){
  139.         node* nodea = q.front();
  140.        
  141.             if (h == 2){    //if 2(which is the level 2) then delete nodes
  142.                 deletenode(root, nodea->value);
  143.             }
  144.  
  145.         q.pop();
  146.  
  147.         if (nodea->left != NULL){
  148.             q.push(nodea->left);
  149.         }
  150.         if (nodea->right != NULL){
  151.             q.push(nodea->right);
  152.             h++;
  153.         }
  154.     }
  155. }
  156.  
  157. node* deletenode(node* nodea, int valuea){
  158.     if (nodea == NULL){
  159.         return nodea;
  160.     }
  161.    
  162.     else if (valuea < nodea->value){
  163.         nodea->left = deletenode(nodea->left, valuea);
  164.     }
  165.     else if (valuea > nodea->value){
  166.         nodea->right = deletenode(nodea->right, valuea);
  167.     }
  168.    
  169.     else {
  170.         if (nodea->left == NULL && nodea->right == NULL){
  171.             delete nodea;
  172.             nodea = NULL;
  173.             return nodea;
  174.         }
  175.         else if (nodea->left == NULL){
  176.             node* hold = nodea;    
  177.             nodea = nodea->right;      
  178.             delete hold;       
  179.             return nodea;
  180.         }
  181.         else if (nodea->right == NULL) {
  182.             node* hold = nodea;
  183.             nodea = nodea->left;   
  184.             delete hold;           
  185.             return nodea;
  186.         }
  187.     }
  188.     return nodea;
  189. }
  190.  
  191. /*
  192. the bst illustration before sort:
  193.            10                      --level 0
  194.              \
  195.              80                    --level 1
  196.            /    \
  197.          20      100               --level 2
  198.        /   \      /
  199.      15    40    90                --level 3
  200.           /  \
  201.         30    50                   --level 4
  202.          \       \
  203.          35       65               --level 5
  204.                     \
  205.                      75            --level 6
  206.                              
  207.  the bst illustration after sort:
  208.  10                                    --level 0
  209.    \
  210.     20                                 --level 1
  211.    /   \
  212.  15     30                             --level 2
  213.            \
  214.             35                         --level 3
  215.                \
  216.                 40                     --level 4
  217.                    \
  218.                     50                 --level 5
  219.                        \
  220.                         80             --level 6
  221.                       /    \
  222.                     65      90         --level 7
  223.                      \         \
  224.                      75         100    --level 8
  225.                      
  226. the bst illustration after delete past level 2:
  227.  10                                --level 0
  228.     \
  229.      20                            --level 1
  230.         \
  231.          35                        --level 2
  232.             \
  233.              40                    --level 3
  234.                 \
  235.                  50                --level 4
  236.                     \
  237.                      80            --level 5
  238.                    /    \
  239.                  65      90        --level 6
  240.                   \        \
  241.                   75        100    --level 7
  242. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement