lain each line by adding comments #include using namespace std; class Node { public: int value; Node * left; Node * right;
explain each line by adding comments
#include<iostream>
using namespace std;
class Node {
public:
int value;
Node * left;
Node * right;
Node() {
value = 0;
left = NULL;
right = NULL;
}
Node(int v) {
value = v;
left = NULL;
right = NULL;
}
};
class BST {
public:
Node * root;
BST() {
root = NULL;
}
bool isTreeEmpty() {
if (root == NULL) {
return true;
}
else {
return false;
}
}
void insertNode(Node * new_node) {
if (root == NULL) {
root = new_node;
cout << "Value Inserted as root node!" << endl;
}
else {
Node * temp = root;
while (temp != NULL) {
if (new_node -> value == temp -> value) {
cout << "Value Already exist," <<
"Insert another value!" << endl;
return;
}
else if ((new_node -> value < temp -> value) && (temp -> left == NULL)) {
temp -> left = new_node;
cout << "Value Inserted to the left!" << endl;
break;
}
else if (new_node -> value < temp -> value) {
temp = temp -> left;
}
else if ((new_node -> value > temp -> value) && (temp -> right == NULL)) {
temp -> right = new_node;
cout << "Value Inserted to the right!" << endl;
break;
}
else {
temp = temp -> right;
}
}
}
}
Node* insertRecursive(Node *r, Node *new_node)
{
if(r==NULL)
{
r=new_node;
cout <<"Insertion successful"<<endl;
return r;
}
if(new_node->value < r->value)
{
r->left = insertRecursive(r->left,new_node);
}
else if (new_node->value > r->value)
{
r->right = insertRecursive(r->right,new_node);
}
else
{
cout << "No duplicate values allowed!" << endl;
return r;
}
return r;
}
void printPreorder(Node * r)
{
if (r == NULL)
return;
cout << r -> value << " ";
printPreorder(r -> left);
printPreorder(r -> right);
}
void printInorder(Node * r)
{
if (r == NULL)
return;
printInorder(r -> left);
cout << r -> value << " ";
printInorder(r -> right);
}
void printPostorder(Node * r)
{
if (r == NULL)
return;
printPostorder(r -> left);
printPostorder(r -> right);
cout << r -> value << " ";
}
Node * iterativeSearch(int v) {
if (root == NULL) {
return root;
} else {
Node * temp = root;
while (temp != NULL) {
if (v == temp -> value) {
return temp;
} else if (v < temp -> value) {
temp = temp -> left;
} else {
temp = temp -> right;
}
}
return NULL;
}
}
Node * recursiveSearch(Node * r, int val) {
if (r == NULL || r -> value == val)
return r;
else if (val < r -> value)
return recursiveSearch(r -> left, val);
else
return recursiveSearch(r -> right, val);
}
int height(Node * r) {
if (r == NULL)
return -1;
else {
int lheight = height(r -> left);
int rheight = height(r -> right);
if (lheight > rheight)
return (lheight + 1);
else return (rheight + 1);
}
}
void printGivenLevel(Node * r, int level) {
if (r == NULL)
return;
else if (level == 0)
cout << r -> value << " ";
else
{
printGivenLevel(r -> left, level - 1);
printGivenLevel(r -> right, level - 1);
}
}
void printLevelOrderBFS(Node * r) {
int h = height(r);
for (int i = 0; i <= h; i++)
printGivenLevel(r, i);
}
Node * minValueNode(Node * node) {
Node * current = node;
while (current -> left != NULL) {
current = current -> left;
}
return current;
}
Node * deleteNode(Node * r, int v) {
if (r == NULL) {
return NULL;
}
else if (v < r -> value) {
r -> left = deleteNode(r -> left, v);
}
else if (v > r -> value) {
r -> right = deleteNode(r -> right, v);
}
else {
if (r -> left == NULL) {
Node * temp = r -> right;
delete r;
return temp;
} else if (r -> right == NULL) {
Node * temp = r -> left;
delete r;
return temp;
} else {
Node * temp = minValueNode(r -> right);
r -> value = temp -> value;
r -> right = deleteNode(r -> right, temp -> value);
}
}
return r;
}
};
int main() {
BST obj;
Node *new_node = new Node();
new_node->value = 10;
obj.insertNode(new_node);
Node *new_node1 = new Node();
new_node1->value = 32;
obj.insertNode(new_node1);
Node *new_node2 = new Node();
new_node2->value = 70;
obj.insertNode(new_node2);
Node *new_node3 = new Node();
new_node3->value = 15;
obj.insertNode(new_node3);
Node *new_node4 = new Node();
new_node4->value = 60;
obj.insertNode(new_node4);
Node *new_node5 = new Node();
new_node5->value = 5;
obj.insertNode(new_node5);
Node *new_node6 = new Node();
new_node6->value = 7;
obj.insertNode(new_node6);
Node *new_node7 = new Node();
new_node7->value = 23;
obj.insertNode(new_node7);
Node *new_node8 = new Node();
new_node8->value = 19;
obj.insertNode(new_node8);
// BFS AND DFS
cout << "Breadth First Traversal: \n";
obj.printLevelOrderBFS(obj.root);
cout << endl;
cout <<"PRE-ORDER: ";
obj.printPreorder(obj.root);
cout<<endl;
cout <<"IN-ORDER: ";
obj.printInorder(obj.root);
cout<<endl;
cout <<"POST-ORDER: ";
obj.printPostorder(obj.root);
new_node = obj.iterativeSearch(32);
if (new_node != NULL) {
obj.deleteNode(obj.root, 32);
cout << "\nValue Deleted" << endl;
}
else {
cout << "\nValue NOT found" << endl;
}
cout << "Breadth First Traversal: \n";
obj.printLevelOrderBFS(obj.root);
cout << endl;
return 0;
}
Step by step
Solved in 2 steps with 1 images