JustPaste.it

C++ Programming Challenge: Binary Search Tree Adventure

User avatar
enzojade62 @enzojade62 · Dec 28, 2023

Ready for a C++ programming challenge? In this blog post, we'll embark on a journey to implement a basic binary search tree (BST). If you need help with C++ programming assignment, our expert team is ready to assist you in overcoming he challenges of this adventure and ensuring success in your programming endeavors!

needhelpwithcppprogrammingassignment.png

Problem Description

The Task:

Your mission is to write C++ code to implement a simple binary search tree. The tree should support operations such as insertion, deletion, and searching for a value.

How to Approach the Problem:

Let's break down the problem into manageable steps:

Step 1: Node Class

Create a C++ class named Node to represent a node in the binary search tree. Each node should contain a data field, a pointer to the left child, and a pointer to the right child.

#include <iostream>

class Node {
public:
    int data;
    Node* left;
    Node* right;

    Node(int value) : data(value), left(nullptr), right(nullptr) {}
};

Step 2: BinarySearchTree Class

Create another C++ class named BinarySearchTree to represent the binary search tree. Define methods for inserting a node, deleting a node, and searching for a value.

#include <iostream>

class Node {
public:
    int data;
    Node* left;
    Node* right;

    Node(int value) : data(value), left(nullptr), right(nullptr) {}
};

class BinarySearchTree {
private:
    Node* root;

    Node* insert(Node* root, int value) {
        if (root == nullptr) {
            return new Node(value);
        }

        if (value < root->data) {
            root->left = insert(root->left, value);
        } else if (value > root->data) {
            root->right = insert(root->right, value);
        }

        return root;
    }

    Node* remove(Node* root, int value) {
        if (root == nullptr) {
            return nullptr;
        }

        if (value < root->data) {
            root->left = remove(root->left, value);
        } else if (value > root->data) {
            root->right = remove(root->right, value);
        } else {
            if (root->left == nullptr) {
                Node* temp = root->right;
                delete root;
                return temp;
            } else if (root->right == nullptr) {
                Node* temp = root->left;
                delete root;
                return temp;
            }

            Node* successor = findMin(root->right);
            root->data = successor->data;
            root->right = remove(root->right, successor->data);
        }

        return root;
    }

    bool search(Node* root, int value) const {
        if (root == nullptr) {
            return false;
        }

        if (value == root->data) {
            return true;
        } else if (value < root->data) {
            return search(root->left, value);
        } else {
            return search(root->right, value);
        }
    }

    Node* findMin(Node* root) const {
        while (root->left != nullptr) {
            root = root->left;
        }
        return root;
    }

public:
    BinarySearchTree() : root(nullptr) {}

    void insert(int value) {
        root = insert(root, value);
    }

    void remove(int value) {
        root = remove(root, value);
    }

    bool search(int value) const {
        return search(root, value);
    }
};

Step 3: Testing

Test your binary search tree implementation with different scenarios, ensuring it handles various insertions, deletions, and searches correctly.

Example

Let's walk through a sample scenario to solidify your understanding. The provided C++ solution serves as a guide to help you implement your own solution. Understand the logic behind each step and adapt it to your programming style.

#include <iostream>

int main() {
    BinarySearchTree bst;

    // Test binary search tree operations here
    bst.insert(5);
    bst.insert(3);
    bst.insert(7);

    std::cout << "Does 3 exist in the tree? " << (bst.search(3) ? "Yes" : "No") << std::endl;  // Should print Yes

    bst.remove(3);

    std::cout << "Does 3 exist in the tree? " << (bst.search(3) ? "Yes" : "No") << std::endl;  // Should print No

    return 0;
}

This programming assignment offers a practical application of C++ programming by creating a binary search tree. As you progress through each step, you'll not only refine your coding skills but also gain a practical understanding of how binary search trees work and their applications.