0% found this document useful (0 votes)
10 views6 pages

Tejas Gitkhane Roll No.: S511042

Uploaded by

jaywareg003
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views6 pages

Tejas Gitkhane Roll No.: S511042

Uploaded by

jaywareg003
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

Name : Tejas Gitkhane

Roll no. : S511042


Class : SE

Div. :A

Batch : A2

Experiment 5
Implement a binary search tree with following operation: insertion, deletion and searching or tree
traversing.

#include <iostream>

using namespace std;

class Node {

public:

int data;

Node* left;

Node* right;

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

};

class BST {

private:

Node* root;

Node* insert(Node* node, int val) {

if (!node) {

return new Node(val);

if (val < node->data) {

node->left = insert(node->left, val);


} else if (val > node->data) {

node->right = insert(node->right, val);

return node;

Node* search(Node* node, int val) {

if (!node || node->data == val) {

return node;

if (val < node->data) {

return search(node->left, val);

return search(node->right, val);

Node* findMin(Node* node) {

while (node && node->left) {

node = node->left;

return node;

Node* deleteNode(Node* node, int val) {

if (!node) {

return node;

if (val < node->data) {

node->left = deleteNode(node->left, val);

} else if (val > node->data) {

node->right = deleteNode(node->right, val);


}

else

// Node with only one child or no child

if (!node->left) {

Node* temp = node->right;

delete node;

return temp;

else if (!node->right)

Node* temp = node->left;

delete node;

return temp;

// Node with two children: Get the inorder successor (smallest in the right
subtree)

Node* temp = findMin(node->right);

node->data = temp->data; // Copy the inorder successor's


content to this node

node->right = deleteNode(node->right, temp->data); //


Delete the inorder successor

return node;

void inOrder(Node* node) {

if (node) {

inOrder(node->left);

cout << node->data << " ";

inOrder(node->right);
}

public:

BST() : root(nullptr) {}

void insert(int val) {

root = insert(root, val);

Node* search(int val) {

return search(root, val);

void deleteNode(int val) {

root = deleteNode(root, val);

void inOrder() {

inOrder(root);

cout << endl;

};

int main() {

BST tree;

tree.insert(50);

tree.insert(30);

tree.insert(20);

tree.insert(40);
tree.insert(70);

tree.insert(60);

tree.insert(80);

cout << "Inorder traversal: ";

tree.inOrder();

cout << "Deleting 20\n";

tree.deleteNode(20);

cout << "Inorder traversal: ";

tree.inOrder();

cout << "Deleting 30\n";

tree.deleteNode(30);

cout << "Inorder traversal: ";

tree.inOrder();

cout << "Deleting 50\n";

tree.deleteNode(50);

cout << "Inorder traversal: ";

tree.inOrder();

int key = 40;

Node* result = tree.search(key);

if (result) {

cout << "Found " << key <<endl;

} else {

cout << key << " not found" << endl;

return 0;

}
OUTPUT:

You might also like