From aa49e9f693e60443662e15baa90e5333abe1c211 Mon Sep 17 00:00:00 2001 From: Mohammad Kaif Date: Fri, 19 Nov 2021 23:06:33 +0530 Subject: [PATCH 1/2] linked list all operation solution --- drivercode/linked_list_sol.cpp | 220 +++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 drivercode/linked_list_sol.cpp diff --git a/drivercode/linked_list_sol.cpp b/drivercode/linked_list_sol.cpp new file mode 100644 index 0000000..ea3a11b --- /dev/null +++ b/drivercode/linked_list_sol.cpp @@ -0,0 +1,220 @@ +// Linkedlist Driver Code + +// Write include statements. +#include + +using namespace std; + +// Linkedlist node +class Node { + public: + int val; + Node * next; + Node () { + this->next = NULL; + } + Node(int val) { + this->val = val; + this->next = NULL; + } +}; + + +// Print linked list +void printList(Node *head) { + while(head != NULL){ + cout<val<<" "; + head = head->next; + } + cout< generateRandomArray(int size ){ + vector arr(size); + for(int i=1;i<=size;i++){ + arr[i-1] = rand() % 117; + } + sort(arr.begin(),arr.end()); + return arr; +} + + +// Convert array to linkedlist +Node * convertArrayToLinkedList(vector & v) { + + Node* head =new Node(); + Node* temp = head; + for(auto it:v){ + Node * temp = new Node(it); + head->next = temp; + head = head->next; + } + return temp->next; +} + + + +// Insert into a linked list at given position. Position = 1 means insert before head. +Node * insertNode (Node * head, int val, int position) { + if(position == 1 ){ + Node* temp = new Node(val); + temp->next = head; + head = temp; + return head; + } + int cnt = 1; + Node * temp = head; + while(cnt!=position-1){ + temp = temp->next; + cnt++; + + } + Node* temp2 = new Node(val); + temp2->next = temp->next; + temp->next = temp2; + + + + return head; +} + + +// Delete from a linked list. +Node *deleteNode (Node * head, int position) { + if(position == 1){ + return head->next; + } + if(head->next == NULL){ + Node *temp = new Node(); + return temp; + } + int cnt = 1; + Node * temp = head; + while(cnt != position-1){ + temp = temp->next; + cnt++; + } + temp->next = temp->next->next; + + + return head; +} + + +// Compare linkedlists. +bool areEqual(Node *head1, Node * head2) { + while(head1 != NULL and head2 !=NULL){ + if(head1->val != head2->val) + return false; + head1 = head1->next; + head2 = head2->next; + } + if(head1 != NULL or head2 !=NULL) + return false; + return true; +} + +// K = 1 means delete last node. +Node *deleteKthNodeFromEnd(Node * head, int k) { + Node * temp1 = head; + Node* temp2 = head; + + while(k-- and temp1!=NULL){ + temp1 = temp1->next; + } + if(temp1 == NULL) + return head->next; + while(temp1->next != NULL){ + temp2 = temp2->next; + temp1 = temp1->next; + } + temp2->next = temp2->next->next; + + return head; +} + + + +// Reverse a linkedlist. +Node * reverseList(Node *head) { + Node * next = head; + Node* curr = head; + Node * prev = NULL; + while(curr != NULL){ + next = curr->next; + curr->next = prev; + prev = curr; + curr = next; + } + return prev; +} + +// Merge sorted lists. +Node * mergeSortedLists(Node * head1, Node * head2) { + Node *h1 = head1; + if(head1->val < head2->val){ + head1 = head1->next; + } + else{ + h1 = head2; + head2 = head2->next; + } + Node* temp = h1; + while(head1 != NULL and head2 != NULL){ + if(head1->val < head2->val){ + + h1->next = head1; + h1 = h1->next; + head1 = head1->next; + } + else{ + h1->next = head2; + h1 = h1->next; + head2 = head2->next; + } + } + while(head1 != NULL){ + h1->next = head1; + head1 = head1->next; + h1 = h1->next; + } + while(head2 != NULL){ + h1->next = head1; + head2 = head2->next; + h1 = h1->next; + } + +return temp; +} + +int main() { + // 1. Get a random array. + // 2. Convert array to LinkedList List1. + // 3. Insert a number at position P into the list. + // 4. Delete this number from position P. + // 5. Create another linkedlist (List2) from the same random array. + // 6. Compare that List1 is the same as List2. + + int size = 4; + vector arr = generateRandomArray(size); + vector arr2 = generateRandomArray(size+2); + Node *head = convertArrayToLinkedList(arr); + Node *head2 = convertArrayToLinkedList(arr2); +// printList(head); +// head = insertNode(head,312,11); +// printList(head); +// head = deleteNode(head,10); + printList(head); + printList(head2); +// printList(head2); +// cout<< areEqual(head,head2)< Date: Mon, 22 Nov 2021 23:22:36 +0530 Subject: [PATCH 2/2] BST sol --- drivercode/BSTDriver | Bin 0 -> 135976 bytes drivercode/BSTDriver.cpp | 209 +++++++++++++++++++++++++++++++++++---- 2 files changed, 188 insertions(+), 21 deletions(-) create mode 100755 drivercode/BSTDriver diff --git a/drivercode/BSTDriver b/drivercode/BSTDriver new file mode 100755 index 0000000000000000000000000000000000000000..667ea482484effa4ad9eb5ae7aaf840c6814867a GIT binary patch literal 135976 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 literal 0 HcmV?d00001 diff --git a/drivercode/BSTDriver.cpp b/drivercode/BSTDriver.cpp index 5bc7709..c2cb560 100644 --- a/drivercode/BSTDriver.cpp +++ b/drivercode/BSTDriver.cpp @@ -3,7 +3,8 @@ #include #include #include - +#include +#include using namespace std; @@ -11,68 +12,203 @@ class TreeNode { public: int val; TreeNode * left; - TreeNode * right; - // Add constructor. + TreeNode * right; + + // Add constructor. + TreeNode(){ + + this->right = this->left = NULL; + } + TreeNode(int val){ + this->val = val; + this->right = this->left = NULL; + } }; vector generateRandomArray(int size) { - return vector(size); + vector arr(size); + for(int i=0;ileft),height(root->right)) + 1; + +} +void inorder(TreeNode* root){ + if(root==NULL) + return; + inorder(root->left); + cout<val<<" "; + inorder(root->right); + return; +} +void preorder(TreeNode* root){ + if(root == NULL) + return; + cout<val<<" "; + preorder(root->left); + preorder(root->right); + return; +} +void postorder(TreeNode * root){ + if(root == NULL) + return; + postorder(root->left); + postorder(root->right); + cout<val<<" "; + return; } - void printTraversals(TreeNode * root) { // print inorder + cout<<"Inorder"<val == val) + return root; + if(root->val > val) + return search(root->left, val); + + return search(root->right, val); } // Return parent even if val is not present in tree. // Basically return the parent of the location where val should have been. TreeNode* searchParent(TreeNode * root, int val) { - return NULL; + if(root == NULL) + return root; + + if(root->left != NULL and root->left->val == val) + return root; + if(root->right != NULL and root->right->val == val) + return root; + if(root->val>val) + return searchParent(root->left,val); + return searchParent(root->right,val); } TreeNode * insert(TreeNode * root, int val) { - return root; + if (root == NULL) { + TreeNode* t=new TreeNode(val); + return t; + } + + + if (val< root->val) { + root->left = insert(root->left, val); + } + else { + root->right = insert(root->right, val); + } + + return root; + + } int maxValue(TreeNode * root) { - return INT_MAX; + if(root->right == NULL) + return root->val; + + return maxValue(root->right); } int minValue(TreeNode * root) { - return INT_MIN; + if(root->left == NULL) + return root->val; + + return minValue(root->left); } // Return NULL if val has no successor, ie, val is greater than maxValue(root); // Successor should be returned even if val is not present in the tree. -TreeNode * findSuccessor(TreeNode * root) { - return NULL; +TreeNode * findSuccessor(TreeNode * root,TreeNode* Root) { + + if(root == NULL) + { return root;} + if(root->right) + return search(root->right,minValue(root->right)); + TreeNode * t = searchParent(Root,root->val); + while( t!=NULL and root == t->right){ + root = t; + t = searchParent(Root,root->val); + } + return t; } // Return NULL if val has no predecessor, ie, val is smaller than minValue(root); // Predecessor should be returned even if val is not present in the tree. -TreeNode * findPredecessor(TreeNode * root) { - return NULL; +TreeNode * findPredecessor(TreeNode * root,TreeNode* Root) { + if(root == NULL) + return root; + if(root->left) + return search(root->left,maxValue(root->left)); + TreeNode * t = searchParent(Root,root->val); + while( t!=NULL and root == t->left){ + root = t; + t = searchParent(Root,root->val); + } + return t; } // First generate random array. Then build this tree by calling insert() on each element of array. TreeNode * buildTree(vector & v) { // Call insert() repeatedly to build the tree. - TreeNode * root = new TreeNode(); - return root; + TreeNode* root = NULL; + for(auto it:v) + { + root = insert(root,it); + } + return root; } +void LevelOrderBFS(TreeNode* root){ + if(root == NULL) + return ; + queue q; + q.push(root); + q.push(NULL); + while(!q.empty()){ + TreeNode* temp = q.front(); + q.pop(); + if(temp == NULL) + { + cout<<"\n"; + if(!q.empty()) + q.push(NULL); + } + else{ + cout<val<<" "; + if(temp->left) + q.push(temp->left); + if(temp->right) + q.push(temp->right); + } + + } + return; +} int main() { @@ -80,20 +216,51 @@ int main() { // https://www.youtube.com/watch?v=K6nw5TvhX2s&list=PLrYpW0KwQ3sMemsZOzhawxMpFet3Hb3SN&index=39 // 1. Generate a random array. - // 2. Create an empty tree and insert one value from the array at a time. - // 3. Inorder traversal of this binary search tree should be equal to the sorted value of random array. + vector arr = generateRandomArray(10); + for(auto it:arr) + cout<val<<" is "<val<<" \n"; + temp = succ; + succ = findSuccessor(temp,root); + } + // of the value just obtained. Print again and so on. // 7. This list should be equal to the sorted value of the array. // 8. Find the maximum value in the array. + int mx = maxValue(root); + cout<<"Max value in tree : "<val<<" is "<val<<" \n"; + temp = psucc; + psucc = findPredecessor(temp,root); + } }