Binary Search Tree
The following C++ code will explains the implementation of Binary Search Tree.The following implementation is in object oriented using the Tree class and tree object.
The implemented ADT functions of Binary Search Tree are insert and search.
In Tree.h
#pragma once class Tree { public: struct Node { int data; Node *left; Node *right; Node *previous; }*root, *current, *p; int SearchSign, sign, level; public: Tree(); // Constructor ~Tree(); // Destructor void InsertInBinaryTree(int _numberToInsert); void SearchInBinaryTree(int _numberToSearch); };
In Tree.cpp
#include "Tree.h" #include "iostream" using namespace std; Tree::Tree() { root = new Node; root->previous = NULL; root->data = 0; root->left = NULL; root->right = NULL; current = root; p = root; SearchSign = 0; sign = 0; level = 0; } Tree::~Tree() { delete root; } void Tree::InsertInBinaryTree(int _numberToInsert) { if (_numberToInsert > current->data) // Right Subtree sign = 2; else if (_numberToInsert < current->data) // Left Subtree sign = 1; else // Equal to the root sign = 0; switch (sign) { case 2: if (current->right == NULL) { current= new Node; current->data = _numberToInsert; current->previous = p; cout << "The number " << _numberToInsert << " goes on right subtree with parent : " << current->previous->data; p->right = current; current->left = NULL; current->right = NULL; p = current; } else { p = p->right; current = p; Tree::InsertInBinaryTree(_numberToInsert); } break; case 1: if (current->left == NULL) { current = new Node; current->data = _numberToInsert; current->previous = p; cout << "The number " << _numberToInsert << " goes on left subtree with parent : " << current->previous->data; p->left = current; current->left = NULL; current->right = NULL; p = current; } else { p = p->left; current = p; Tree::InsertInBinaryTree(_numberToInsert); } break; case 0: cout << "Number " << _numberToInsert << " is already with root: " << p->previous->data; break; } sign = 3; } void Tree::SearchInBinaryTree(int _numberToSearch) { if (_numberToSearch > current->data) // Right Subtree SearchSign = sign = 2; else if (_numberToSearch < current->data) // Left Subtree SearchSign = sign = 1; else // Equal to the root sign = 0; switch (sign) { case 2: p = p->right; current = p; ++level; Tree::SearchInBinaryTree(_numberToSearch); break; case 1: p = p->left; current = p; ++level; Tree::SearchInBinaryTree(_numberToSearch); break; case 0:if (SearchSign == 2) cout << "The number " << _numberToSearch << " is on right node with parent : " << current->previous->data << " and level : " << level; else if (SearchSign == 1) cout << "The number " << _numberToSearch << " is on left node with parent : " << current->previous->data << " and level : " << level; if (root->data == _numberToSearch) cout << "The number " << _numberToSearch << " is the root of your tree and level : " << level; break; } sign = 3; }
In Program.h
#pragma once #include "iostream" #include "Tree.h" using namespace std; class Program { public: static int Main() { Tree tree; cout << "Enter a number to make the root: "; cin >> tree.root->data; char inputCharacter = 'y'; //------------Insert values-------------------- while ((inputCharacter == 'y') || (inputCharacter == 'Y')) { int inputNumber; cout << "\nEnter a number to make the node of your tree: "; cin >> inputNumber; tree.InsertInBinaryTree(inputNumber); tree.current = tree.root; tree.p = tree.root; tree.sign = 3; cout << "\n\nDo you want to enter more values in your Tree: (y/n) : "; cin >> inputCharacter; } //------------Search values-------------------- inputCharacter = 'y'; while ((inputCharacter == 'y') || (inputCharacter == 'Y')) { tree.current = tree.root; tree.p = tree.root; tree.sign = 3; tree.SearchSign = 3; tree.level = 0; int searchNumber; cout << "\n\n\nEnter a number to search in your tree: "; cin >> searchNumber; tree.SearchInBinaryTree(searchNumber); cout << "\n\nDo you want to enter more values in your Tree: (y/n) : "; cin >> inputCharacter; } return 0; } };
In main.cpp
#include "Program.h" int main() { return Program::Main();; }
No comments:
Post a Comment
Your valuable comments are appreciated...!