Binary Search Tree Implementation: CSU1051P - Shoolini U | Navigating and Manipulating Search Trees with dmj.one

Implementation of Binary Search Tree

To understand the implementation of a binary search tree using C++

Objective

To understand the implementation of a binary search tree using structures using C++

#include <iostream>
using namespace std;

struct Node {
    int val;
    Node* left;
    Node* right;
};

Node* createNode(int val) {
    Node* newNode = new Node();
    if (!newNode) {
        cout << "Memory allocation failed";
        return NULL;
    }
    newNode->val = val;
    newNode->left = newNode->right = NULL;
    return newNode;
}

Node* insertNode(Node* root, int val) {
    if (root == NULL) {
        root = createNode(val);
        return root;
    }

    if (val < root->val)
        root->left = insertNode(root->left, val);

    else if (val > root->val)
        root->right = insertNode(root->right, val);

    else 
        cout << "Duplicate value! Node not added." << endl;

    return root;
}

void printInOrder(Node* root) {
    if (root == NULL)
        return;
    printInOrder(root->left);
    cout << root->val << " ";
    printInOrder(root->right);
}

int main() {
    Node* root = NULL;
    root = insertNode(root, 10);
    insertNode(root, 20);
    insertNode(root, 30);
    insertNode(root, 15);
    insertNode(root, 5);

    printInOrder(root);
    return 0;
}

Discussion of Algorithm

  1. Start.
  2. Create a new node with the value.
  3. Check if the tree is empty. If it is, the new node is the root.
  4. If the tree is not empty, compare the new value with the current node value.
  5. If the new value is less than the current node value, go to the left child. If the left child is null, insert here. If not, repeat step 4.
  6. If the new value is greater than the current node value, go to the right child. If the right child is null, insert here. If not, repeat step 4.
  7. If the new value is equal to the current value, return an error or simply ignore.
  8. End.

Representations


Flow Diagram

   +----------------------------------+
   |                                  |
   |            Start                 |
   |              |                   |
   +----------------------------------+
                  |
                  V
   +----------------------------------+
   |                                  |
   |         Node* root               |
   |              |                   |
   +----------------------------------+
                  |
                  V
   +----------------------------------+
   |                                  |
   |  root = insertNode(root, 10);    |
   |              |                   |
   +----------------------------------+
                  |
                  V
   +----------------------------------+
   |                                  |
   |    insertNode(root, 20);         |
   |    insertNode(root, 30);         |
   |    insertNode(root, 15);         |
   |    insertNode(root, 5);          |
   |              |                   |
   +----------------------------------+
                  |
                  V
   +----------------------------------+
   |                                  |
   |        printInOrder(root)        |
   |              |                   |
   +----------------------------------+
                  |
                  V
   +----------------------------------+
   |                                  |
   |            Exit                  |
   |             |                    |
   +----------------------------------+


Tabular Dry Run

Action Node Value Operation Output Tree
Insert 10 Tree is empty, insert 10 at root 10
Insert 20 20 > 10, insert to the right of 10 10 → 20
Insert 30 30 > 10 and 30 > 20, insert to the right of 20 10 → 20 → 30
Insert 15 15 > 10 and 15 < 20, insert to the left of 20 10 → (15, 20 → 30)
Insert 5 5 < 10, insert to the left of 10 (5, 10) → (15, 20 → 30)
10 Insert 10 at root 10 20 Insert 20, greater than 10, insert right 10 (20) 30 Insert 30, greater than 10 and 20, insert right 10 (20 (30)) 15 Insert 15 - 10 > 15 < 20, insert left to 20 10 (20 (15, 30)) 5 Insert 5, less than 10, insert left to 10 10 (5, 20 (15, 30))

Output

5 10 15 20 30