diff --git a/11. Linked List/README.md b/11. Linked List/README.md
index a209c884..127657f6 100644
--- a/11. Linked List/README.md
+++ b/11. Linked List/README.md
@@ -1,5 +1,5 @@
# Aug 13
-## Linklist
+## Linked list
1. merge-two-sorted-linked-lists
2.reverse-a-linked-list
diff --git a/11. Linked List/doublyLinkedListInOOP.cpp b/11. Linked List/doublyLinkedListInOOP.cpp
new file mode 100644
index 00000000..935c0d21
--- /dev/null
+++ b/11. Linked List/doublyLinkedListInOOP.cpp
@@ -0,0 +1,157 @@
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *next, *prev;
+ Node(int data)
+ {
+ this -> data = data;
+ this -> next = nullptr;
+ this -> prev = nullptr;
+ }
+};
+class LinkedList
+{
+ Node *head = nullptr, *tail = nullptr;
+ int countNode()
+ {
+ int count = 0;
+ Node *temp = head;
+ while (temp)
+ {
+ count++;
+ temp = temp -> next;
+ }
+ return count;
+ }
+public:
+ void createDoublyLinkedList(int data)
+ {
+ Node *newNode = new Node(data);
+ if (!head)
+ head = tail = newNode;
+ else
+ {
+ tail -> next = newNode;
+ newNode -> prev = tail;
+ tail = newNode;
+ }
+ }
+ void insertAtBeginning(int data)
+ {
+ Node *newNode = new Node(data);
+ head -> prev = newNode;
+ newNode -> next = head;
+ head = newNode;
+ }
+ void insertAtEnd(int data)
+ {
+ Node *newNode = new Node(data);
+ tail -> next = newNode;
+ newNode -> prev = tail;
+ tail = newNode;
+ }
+ void insertAtPosition(int data, int position)
+ {
+ if (position < 1 || position > countNode())
+ exit(1);
+ else if (position == 1)
+ insertAtBeginning(data);
+ else
+ {
+ Node *newNode = new Node(data);
+ Node *temp = head;
+ for (int i = 1; i < position - 1; i++)
+ temp = temp -> next;
+ newNode -> prev = temp;
+ newNode -> next = temp -> next;
+ temp -> next = newNode;
+ newNode -> next -> prev = newNode;
+ }
+ }
+ void deleteFromBeginning()
+ {
+ Node *temp = head;
+ if (!head)
+ exit(2);
+ head = head -> next;
+ head -> prev = nullptr;
+ delete temp;
+ }
+ void deleteFromEnd()
+ {
+ if (!tail)
+ exit(3);
+ Node *temp = tail;
+ tail -> prev -> next = nullptr;
+ tail = tail -> prev;
+ delete temp;
+ }
+ void deleteFromPosition(int position)
+ {
+ if (position < 1 || position > countNode())
+ exit(4);
+ if (position == 1)
+ deleteFromBeginning();
+ else if (position == countNode())
+ deleteFromEnd();
+ else
+ {
+ Node *temp = head;
+ for (int i = 1; i < position; i++)
+ temp = temp -> next;
+ temp -> prev -> next = temp -> next;
+ temp -> next -> prev = temp -> prev;
+ delete temp;
+ }
+ }
+ void reverseList()
+ {
+ Node *currentNode, *nextNode;
+ currentNode = head;
+ while (currentNode)
+ {
+ nextNode = currentNode -> next;
+ currentNode -> next = currentNode -> prev;
+ currentNode -> prev = nextNode;
+ currentNode = nextNode;
+ }
+ currentNode = head;
+ head = tail;
+ tail = currentNode;
+ }
+ void displayList()
+ {
+ if (!head)
+ exit(2);
+ Node *temp = head;
+ while (temp)
+ {
+ cout << temp -> data << " ";
+ temp = temp -> next;
+ }
+ cout << endl;
+ }
+};
+int main()
+{
+ LinkedList l1;
+ l1.createDoublyLinkedList(3);
+ l1.createDoublyLinkedList(4);
+ l1.createDoublyLinkedList(5);
+ l1.insertAtBeginning(1);
+ l1.insertAtPosition(2, 2);
+ l1.insertAtEnd(6);
+ // l1.deleteFromBeginning();
+ // l1.deleteFromEnd();
+ // l1.deleteFromPosition(2);
+ // l1.deleteFromPosition(1);
+ // l1.deleteFromPosition(2);
+ // l1.displayList();
+ l1.displayList();
+ l1.reverseList();
+ l1.displayList();
+ return 0;
+}
diff --git a/11. Linked List/singlyCIrcularLinkedListOOP.cpp b/11. Linked List/singlyCIrcularLinkedListOOP.cpp
new file mode 100644
index 00000000..fc2a320c
--- /dev/null
+++ b/11. Linked List/singlyCIrcularLinkedListOOP.cpp
@@ -0,0 +1,156 @@
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *next;
+ Node(int data)
+ {
+ this -> data = data;
+ this -> next = nullptr;
+ }
+};
+class LinkedList
+{
+ Node *tail = nullptr;
+ // void createList(int data) //by maintaining both head and tail pointer
+ // {
+ // Node *newNode = new Node(data);
+ // if (!head)
+ // head = tail = newNode;
+ // else
+ // {
+ // tail -> next = newNode;
+ // tail = newNode;
+ // }
+ // tail -> next = head;
+ // }
+public:
+ void createList(int data) //only maintaining a tail pointer
+ {
+ Node *newNode = new Node(data);
+ if (!tail)
+ {
+ tail = newNode;
+ tail -> next = newNode;
+ }
+ else
+ {
+ newNode -> next = tail -> next;
+ tail -> next = newNode;
+ tail = newNode;
+ }
+ }
+ void displayList()
+ {
+ if (!tail)
+ exit(1);
+ Node *temp = tail -> next;
+ while (temp -> next != tail -> next)
+ {
+ cout << temp -> data << " ";
+ temp = temp -> next;
+ }
+ cout << temp -> data << endl;
+ }
+ void insertAtBeginning(int data)
+ {
+ Node *newNode = new Node(data);
+ if (!tail)
+ tail = newNode;
+ else
+ newNode -> next = tail -> next;
+ tail -> next = newNode;
+ }
+ void insertAtEnd(int data)
+ {
+ Node *newNode = new Node(data);
+ if (!tail)
+ {
+ tail = newNode;
+ tail -> next = newNode;
+ }
+ else
+ {
+ newNode -> next = tail -> next;
+ tail -> next = newNode;
+ tail = newNode;
+ }
+ }
+ void insertAtPosition(int data, int position)
+ {
+ if (position == 1)
+ insertAtBeginning(data);
+ else
+ {
+ Node *newNode = new Node(data);
+ Node *temp = tail -> next;
+ for (int i = 1; i < position - 1; i++)
+ temp = temp -> next;
+ newNode -> next = temp -> next;
+ temp -> next = newNode;
+ }
+ }
+ void deleteFromBeginning()
+ {
+ if (!tail)
+ exit(2);
+ Node *temp = tail -> next;
+ if (temp -> next == temp)
+ tail = nullptr;
+ else
+ tail -> next = temp -> next;
+ delete temp;
+ }
+ void deleteFromEnd()
+ {
+ if (!tail)
+ exit(3);
+ Node *current = tail -> next, *previous;
+ if (current -> next == current)
+ tail = nullptr;
+ else
+ {
+ while (current -> next != tail -> next)
+ {
+ previous = current;
+ current = current -> next;
+ }
+ previous -> next = tail -> next;
+ tail = previous;
+ }
+ delete current;
+ }
+ void deleteFromPosition(int position)
+ {
+ if (!tail)
+ exit(3);
+ if (position == 1)
+ deleteFromBeginning();
+ else
+ {
+ Node *current = tail -> next, *nextNode;
+ for (int i = 1; i < position - 1; i++)
+ current = current -> next;
+ nextNode = current -> next;
+ current -> next = nextNode -> next;
+ delete nextNode;
+ }
+ }
+};
+int main()
+{
+ LinkedList l1;
+ l1.createList(5);
+ l1.createList(6);
+ l1.createList(7);
+ l1.insertAtBeginning(3);
+ l1.insertAtEnd(8);
+ l1.insertAtPosition(4, 2);
+ l1.deleteFromBeginning();
+ l1.deleteFromEnd();
+ l1.deleteFromPosition(3);
+ l1.displayList();
+ return 0;
+}
diff --git a/11. Linked List/singlyLinkedListOOP.cpp b/11. Linked List/singlyLinkedListOOP.cpp
new file mode 100644
index 00000000..dfdf0c75
--- /dev/null
+++ b/11. Linked List/singlyLinkedListOOP.cpp
@@ -0,0 +1,152 @@
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *next;
+ Node(int data)
+ {
+ this -> data = data;
+ this -> next = nullptr;
+ }
+};
+class LinkedList
+{
+ Node *head = nullptr;
+ int countNode()
+ {
+ int count = 0;
+ Node *temp = head;
+ while (temp)
+ {
+ count++;
+ temp = temp -> next;
+ }
+ return count;
+ }
+public:
+ void insertAtBeginning(int data)
+ {
+ Node *newNode = new Node(data);
+ newNode -> next = head;
+ head = newNode;
+ }
+ void insertAtLast(int data)
+ {
+ if (!head)
+ insertAtBeginning(data);
+ Node *newNode = new Node(data);
+ Node *temp = head;
+ while (temp -> next)
+ temp = temp -> next;
+ temp -> next = newNode;
+ }
+ void insertAtPosition(int data, int position)
+ {
+ if (position > countNode())
+ exit(1);
+ Node *newNode = new Node(data);
+ Node *temp = head;
+ int i = 1;
+ while (i < position)
+ {
+ temp = temp -> next;
+ i++;
+ }
+ newNode -> next = temp -> next;
+ temp -> next = newNode;
+ }
+ void deleteFromBeginning()
+ {
+ if (!head)
+ exit(3);
+ Node *temp = head;
+ head = head -> next;
+ delete temp;
+ }
+ void deleteFromEnd()
+ {
+ if (!head)
+ exit(4);
+ Node *temp, *previousNode;
+ while (temp -> next)
+ {
+ previousNode = temp;
+ temp = temp -> next;
+ }
+ if (temp == head)
+ head = nullptr;
+ else
+ previousNode -> next = nullptr;
+ delete temp;
+ }
+ void deleteFromPosition(int position)
+ {
+ if (!head)
+ exit(5);
+ Node *nextNode;
+ int i = 1;
+ Node *temp = head;
+ while (i < position - 1)
+ {
+ temp = temp -> next;
+ i++;
+ }
+ nextNode = temp -> next;
+ temp -> next = nextNode -> next;
+ delete nextNode;
+ }
+ void displayList()
+ {
+ if (!head)
+ exit(2);
+ Node *temp = head;
+ while (temp)
+ {
+ cout << temp -> data << " ";
+ temp = temp -> next;
+ }
+ cout << endl;
+ }
+ void reverseList()
+ {
+ Node *currentNode, *previousNode, *nextNode;
+ currentNode = head;
+ previousNode = nullptr;
+ while (currentNode)
+ {
+ nextNode = currentNode -> next;
+ currentNode -> next = previousNode;
+ previousNode = currentNode;
+ currentNode = nextNode;
+ }
+ head = previousNode;
+ }
+};
+int main()
+{
+ LinkedList l1;
+ // l1.insertAtBeginning(2);
+ // l1.insertAtBeginning(1);
+ // l1.insertAtLast(4);
+ // l1.insertAtPosition(3, 2);
+ // l1.displayList();
+ // l1.deleteFromBeginning();
+ // l1.deleteFromPosition(2);
+ // l1.deleteFromEnd();
+ // l1.displayList();
+ // output 2
+
+ l1.insertAtBeginning(1);
+ l1.insertAtBeginning(2);
+ l1.insertAtBeginning(3);
+ l1.insertAtBeginning(4);
+ l1.insertAtBeginning(5);
+ l1.displayList();
+ l1.reverseList();
+ l1.displayList();
+
+
+ return 0;
+}
diff --git a/12. Stack/arrayImplementation.cpp b/12. Stack/arrayImplementation.cpp
new file mode 100644
index 00000000..135fb036
--- /dev/null
+++ b/12. Stack/arrayImplementation.cpp
@@ -0,0 +1,60 @@
+#include
+using namespace std;
+#define size 10
+class Stack
+{
+ int arr[size];
+ int top = -1;
+public:
+ void push(int data)
+ {
+ if (top == size - 1)
+ {
+ cout << "Stack overflow !" << endl << "Exiting..." << endl;
+ exit(1);
+ }
+ arr[++top] = data;
+ }
+ void pop()
+ {
+ if (top == -1)
+ {
+ cout << "Stack underflow !" << endl << "Exiting..." << endl;
+ exit(2);
+ }
+ top--;
+ }
+ int peek()
+ {
+ if (top == -1)
+ {
+ cout << "Stack empty !" << endl << "Exiting..." << endl;
+ exit(3);
+ }
+ return arr[top];
+ }
+ bool isEmpty()
+ {
+ if (top == -1)
+ return true;
+ return false;
+ }
+ void display()
+ {
+ if (isEmpty())
+ cout << "Stack empty !";
+ else
+ for (int i = 0; i <= top; i++)
+ cout << arr[i] << " ";
+ cout << endl;
+ }
+
+};
+int main()
+{
+ Stack s;
+ s.push(1);
+ s.push(2);
+ s.display();
+ return 0;
+}
diff --git a/12. Stack/evaluatePrefix.cpp b/12. Stack/evaluatePrefix.cpp
new file mode 100644
index 00000000..1e413ce8
--- /dev/null
+++ b/12. Stack/evaluatePrefix.cpp
@@ -0,0 +1,52 @@
+//This code works for single digit values only. Ex : '+ 2 6'
+#include
+#include
+using namespace std;
+int performOperation(char operation, int operand1, int operand2)
+{
+ if (operation == '+')
+ return operand1 + operand2;
+ else if (operation == '-')
+ return operand1 - operand2;
+ else if (operation == '*')
+ return operand1 * operand2;
+ else if (operation == '/')
+ return operand1 / operand2;
+ else
+ exit(1);
+}
+bool isValidOperator(char ch)
+{
+ return (ch == '+' || ch == '-' || ch == '*' || ch == '/') ? true : false;
+}
+bool isValidNumber(char ch)
+{
+ return (ch >= '0' && ch <= '9') ? true : false;
+}
+int evaluatePrefix(string expression)
+{
+ stack s;
+ for (int i = expression.length() - 1; i >= 0; i--)
+ {
+ if (expression[i] == ' ' || expression[i] == ',')
+ continue;
+ else if (isValidOperator(expression[i]))
+ {
+ int operand1 = s.top();
+ s.pop();
+ int operand2 = s.top();
+ s.pop();
+ s.push(performOperation(expression[i], operand1, operand2));
+ }
+ else if (isValidNumber(expression[i]))
+ s.push(expression[i] - '0');
+ }
+ return s.top();
+}
+int main()
+{
+ string expression;
+ getline(cin, expression);
+ cout << evaluatePrefix(expression);
+ return 0;
+}
diff --git a/12. Stack/parenthesis-checker.cpp b/12. Stack/parenthesis-checker.cpp
index 599b0bb1..3d4591ea 100644
--- a/12. Stack/parenthesis-checker.cpp
+++ b/12. Stack/parenthesis-checker.cpp
@@ -1,54 +1,32 @@
-
-// { Driver Code Starts
-#include
+#include
+#include
using namespace std;
-
-
- // } Driver Code Ends
-
-
-class Solution
+bool checkValidPair(char opening, char closing)
{
- public:
- //Function to check if brackets are balanced or not.
- bool ispar(string x)
- {
- int n= x.length();
- stack a;
- int d=0,b=0;
- if(x[0]=='}' || x[0]==')'||x[0]==']') return false;
- for(int i=0;i s;
+ for (int i = 0; i < expression.length(); i++)
+ if (expression[i] == '(' || expression[i] == '{' || expression[i] == '[')
+ s.push(expression[i]);
+ else if (expression[i] == ')' || expression[i] == '}' || expression[i] == ']')
+ if (s.empty() || !checkValidPair(s.top(), expression[i]))
+ return false;
+ else
+ s.pop();
+ return s.empty() ? true : false;
+}
int main()
{
- int t;
- string a;
- cin>>t;
- while(t--)
- {
- cin>>a;
- Solution obj;
- if(obj.ispar(a))
- cout<<"balanced"<> expression;
+ if (checkParenthesesBalanced(expression))
+ cout << "Balanced";
+ else
+ cout << "Not balanced";
+ return 0;
+}
diff --git a/13. Queue/arrayImplementation.cpp b/13. Queue/arrayImplementation.cpp
new file mode 100644
index 00000000..269a483b
--- /dev/null
+++ b/13. Queue/arrayImplementation.cpp
@@ -0,0 +1,52 @@
+#include
+#define n 10
+using namespace std;
+class Queue
+{
+ int arr[n];
+ int front = -1, rear = -1;
+public:
+ bool isEmpty()
+ {
+ return (front == -1 && rear == -1);
+ }
+ bool isFull()
+ {
+ return (((rear + 1) % n) == front);
+ }
+ void enqueue(int data)
+ {
+ if (isFull())
+ exit(1);
+ if (isEmpty())
+ front = rear = 0;
+ else
+ rear = (rear + 1) % n;
+ arr[rear] = data;
+ }
+ void dequeue()
+ {
+ if (isEmpty())
+ exit(2);
+ else if (front == rear)
+ rear = front = -1;
+ else
+ front = (front + 1) % n;
+ }
+ int peek()
+ {
+ if (front == -1)
+ exit(3);
+ return arr[front];
+ }
+};
+int main()
+{
+ Queue q;
+ q.enqueue(1);
+ q.enqueue(2);
+ q.enqueue(3);
+ q.dequeue();
+ cout << q.peek();
+ return 0;
+}
diff --git a/13. Queue/linkedListImplementation.cpp b/13. Queue/linkedListImplementation.cpp
new file mode 100644
index 00000000..b68f192b
--- /dev/null
+++ b/13. Queue/linkedListImplementation.cpp
@@ -0,0 +1,56 @@
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *next;
+ Node(int data)
+ {
+ this -> data = data;
+ this -> next = nullptr;
+ }
+};
+class Queue
+{
+ Node *front = nullptr, *rear = nullptr;
+public:
+ void enqueue(int data)
+ {
+ Node *newNode = new Node(data);
+ if (!front && !rear)
+ front = rear = newNode;
+ else
+ {
+ rear -> next = newNode;
+ rear = newNode;
+ }
+ }
+ void dequeue()
+ {
+ if (!front)
+ exit(1);
+ Node *temp = front;
+ if (front == rear)
+ front = rear = nullptr;
+ else
+ front = front -> next;
+ delete temp;
+ }
+ int peek()
+ {
+ if (!front)
+ exit(2);
+ return front -> data;
+ }
+};
+int main()
+{
+ Queue q;
+ q.enqueue(1);
+ q.enqueue(2);
+ q.enqueue(3);
+ q.dequeue();
+ cout << q.peek();
+ return 0;
+}
diff --git a/15. Tree/checkBSTorNOT.cpp b/15. Tree/checkBSTorNOT.cpp
new file mode 100644
index 00000000..298d6a82
--- /dev/null
+++ b/15. Tree/checkBSTorNOT.cpp
@@ -0,0 +1,59 @@
+#include
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *left, *right;
+ Node(int data)
+ {
+ this->data = data;
+ this->left = this->right = nullptr;
+ }
+};
+class BST
+{
+ Node *root = nullptr;
+ void insertNodeinBST(Node *&root, int data)
+ {
+ if (!root)
+ root = new Node(data);
+ else if (data < root->data)
+ insertNodeinBST(root->left, data);
+ else
+ insertNodeinBST(root->right, data);
+ }
+ bool isBinarySearchTree(Node *root, int minValue, int maxValue)
+ {
+ if (!root)
+ return true;
+ if (root->data > minValue && root->data < maxValue &&
+ isBinarySearchTree(root->left, minValue, root->data) &&
+ isBinarySearchTree(root->right, root->data, maxValue)
+ )
+ return true;
+ return false;
+ }
+public:
+ void insert(int data)
+ {
+ insertNodeinBST(root, data);
+ }
+ bool checkValidBST()
+ {
+ return isBinarySearchTree(root, INT_MIN, INT_MAX);
+ }
+};
+int main()
+{
+ BST t;
+ t.insert(15);
+ t.insert(10);
+ t.insert(20);
+ t.insert(25);
+ t.insert(8);
+ t.insert(12);
+ cout << t.checkValidBST();
+ return 0;
+}
diff --git a/15. Tree/findHeight.cpp b/15. Tree/findHeight.cpp
new file mode 100644
index 00000000..9f63b52e
--- /dev/null
+++ b/15. Tree/findHeight.cpp
@@ -0,0 +1,51 @@
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *left, *right;
+ Node(int data)
+ {
+ this->data = data;
+ this->left = this->right = nullptr;
+ }
+};
+class BST
+{
+ Node *root = nullptr;
+ void insertNode(Node *&root, int data)
+ {
+ if (!root)
+ root = new Node(data);
+ else if (data <= root->data)
+ insertNode(root->left, data);
+ else
+ insertNode(root->right, data);
+ }
+ int calculateHeightBST(Node *root)
+ {
+ if (!root)
+ return -1;
+ return max(calculateHeightBST(root->left), calculateHeightBST(root->right)) + 1;
+ }
+public:
+ void insert(int data)
+ {
+ insertNode(root, data);
+ }
+ int findHeight()
+ {
+ return calculateHeightBST(root);
+ }
+};
+int main()
+{
+ BST t;
+ t.insert(5);
+ t.insert(3);
+ t.insert(8);
+ t.insert(2);
+ cout << t.findHeight();
+ return 0;
+}
diff --git a/15. Tree/findMinMaxFromBST.cpp b/15. Tree/findMinMaxFromBST.cpp
new file mode 100644
index 00000000..c90a77e0
--- /dev/null
+++ b/15. Tree/findMinMaxFromBST.cpp
@@ -0,0 +1,69 @@
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *left, *right;
+ Node(int data)
+ {
+ this->data = data;
+ this->left = this->right = nullptr;
+ }
+};
+class BST
+{
+ Node *root = nullptr;
+ void insertNode(Node *&root, int data)
+ {
+ if (!root)
+ root = new Node(data);
+ else if (data <= root->data)
+ insertNode(root->left, data);
+ else
+ insertNode(root->right, data);
+ }
+ int findMinBST(Node *root)
+ {
+ if (!root)
+ exit(1);
+ else if (root->left == nullptr)
+ return root->data;
+ else
+ return findMinBST(root->left);
+ }
+ int findMaxBST(Node *root)
+ {
+ if (!root)
+ exit(1);
+ else if (root->right == nullptr)
+ return root->data;
+ else
+ return findMaxBST(root->right);
+ }
+public:
+ void insert(int data)
+ {
+ insertNode(root, data);
+ }
+ int findMin()
+ {
+ return findMinBST(root);
+ }
+ int findMax()
+ {
+ return findMaxBST(root);
+ }
+};
+int main()
+{
+ BST t;
+ t.insert(15);
+ t.insert(10);
+ t.insert(20);
+ t.insert(25);
+ t.insert(8);
+ t.insert(12);
+ cout << t.findMin() << " " << t.findMax();
+ return 0;
+}
diff --git a/15. Tree/implementBST.cpp b/15. Tree/implementBST.cpp
new file mode 100644
index 00000000..41d47d89
--- /dev/null
+++ b/15. Tree/implementBST.cpp
@@ -0,0 +1,60 @@
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *left, *right;
+ Node(int data)
+ {
+ this->data = data;
+ this->left = this->right = nullptr;
+ }
+};
+class BST
+{
+ Node *root = nullptr;
+ void insertNode(Node *&root, int data){
+ if (!root)
+ root = new Node(data);
+ else if (data <= root->data)
+ insertNode(root->left, data);
+ else
+ insertNode(root->right, data);
+ }
+ bool searchNode(Node *root, int data)
+ {
+ if (!root)
+ return false;
+ else if (root->data == data)
+ return true;
+ else if (data <= root->data)
+ return searchNode(root->left, data);
+ else
+ return searchNode(root->right, data);
+ }
+public:
+ void insert(int data)
+ {
+ insertNode(root, data);
+ }
+ bool search(int data)
+ {
+ return searchNode(root, data);
+ }
+};
+int main()
+{
+ BST t;
+ t.insert(15);
+ t.insert(10);
+ t.insert(20);
+ t.insert(25);
+ t.insert(8);
+ t.insert(12);
+ cout << t.search(15) << endl;
+ cout << t.search(31) << endl;
+ cout << t.search(20) << endl;
+ cout << t.search(7) << endl;
+ return 0;
+}
diff --git a/15. Tree/treeTraversal.cpp b/15. Tree/treeTraversal.cpp
new file mode 100644
index 00000000..31be95ac
--- /dev/null
+++ b/15. Tree/treeTraversal.cpp
@@ -0,0 +1,103 @@
+#include
+#include
+using namespace std;
+class Node
+{
+public:
+ int data;
+ Node *left, *right;
+ Node(int data)
+ {
+ this->data = data;
+ this->left = this->right = nullptr;
+ }
+};
+class BST
+{
+ Node *root = nullptr;
+ void insertNodeBST(Node *&root, int data)
+ {
+ if (!root)
+ root = new Node(data);
+ else if (data <= root->data)
+ insertNodeBST(root->left, data);
+ else
+ insertNodeBST(root->right, data);
+ }
+ void performLevelOrderTraversal(Node *root)
+ {
+ if (!root)
+ return;
+ queue q;
+ q.push(root);
+ while (!q.empty())
+ {
+ Node *current = q.front();
+ cout << current->data << " ";
+ if (current->left)
+ q.push(current->left);
+ if (current->right)
+ q.push(current->right);
+ q.pop();
+ }
+ cout << endl;
+ }
+ void preorder(Node *root)
+ {
+ if (!root)
+ return;
+ cout << root->data << " ";
+ preorder(root->left);
+ preorder(root->right);
+ }
+ void inorder(Node *root)
+ {
+ if (!root)
+ return;
+ preorder(root->left);
+ cout << root->data << " ";
+ preorder(root->right);
+ }
+ void postorder(Node *root)
+ {
+ if (!root)
+ return;
+ preorder(root->left);
+ preorder(root->right);
+ cout << root->data << " ";
+ }
+public:
+ void insert(int data)
+ {
+ insertNodeBST(root, data);
+ }
+ void levelOrderTraversal()
+ {
+ cout << "Level order : ";
+ performLevelOrderTraversal(root);
+ }
+ void depthFirstTraversal()
+ {
+ cout << "Preorder : ";
+ preorder(root);
+ cout << endl;
+ cout << "Inorder : ";
+ inorder(root);
+ cout << endl;
+ cout << "Postorder : ";
+ postorder(root);
+ cout << endl;
+ }
+
+};
+int main()
+{
+ BST t;
+ t.insert(5);
+ t.insert(3);
+ t.insert(8);
+ t.insert(2);
+ t.levelOrderTraversal();
+ t.depthFirstTraversal();
+ return 0;
+}