Advertisement
Imran_Mohammed

Tree_implementation

Dec 16th, 2021
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. struct node {
  6.   int data;
  7.   struct node *left;
  8.   struct node *right;
  9. };
  10.  
  11. // New node creation
  12. struct node *get_newNode(int data) {
  13.   struct node *new_node = (struct node *)malloc(sizeof(struct node));
  14.  
  15.   new_node->data = data;
  16.   new_node->left = NULL;
  17.   new_node->right = NULL;
  18.   return new_node;
  19. }
  20.  
  21. //Insert Node
  22. struct node *in_sert(struct node *root ,int value){
  23.     if(root == NULL){
  24.         return get_newNode(value);
  25.     }
  26.  
  27.     if(root->data < value){
  28.         root ->right = in_sert(root->right , value);
  29.     }
  30.  
  31.     else if(root->data > value){
  32.         root ->left = in_sert(root->left , value);
  33.     }
  34.  
  35.     return root;
  36. };
  37.  
  38.  
  39. // Traverse Preorder
  40. void traversePreOrder(struct node *temp) {
  41.   if (temp != NULL) {
  42.     cout << " " << temp->data;
  43.     traversePreOrder(temp->left);
  44.     traversePreOrder(temp->right);
  45.   }
  46. }
  47.  
  48. // Traverse Inorder
  49. void traverseInOrder(struct node *temp) {
  50.   if (temp != NULL) {
  51.     traverseInOrder(temp->left);
  52.     cout << " " << temp->data;
  53.     traverseInOrder(temp->right);
  54.   }
  55. }
  56.  
  57.  
  58. // Traverse Postorder
  59. void traversePostOrder(struct node *temp) {
  60.   if (temp != NULL) {
  61.     traversePostOrder(temp->left);
  62.     traversePostOrder(temp->right);
  63.     cout << " " << temp->data;
  64.   }
  65. }
  66.  
  67.  
  68. struct node * minValueNode(struct node* node){
  69.    struct node* current = node;
  70.    while (current && current->left != NULL)
  71.       current = current->left;
  72.    return current;
  73. }
  74.  
  75.  
  76. struct node* deleteNode(struct node* root, int data){
  77.    if (root == NULL) return root;
  78.       if (data < root->data)
  79.          root->left = deleteNode(root->left, data);
  80.       else if (data > root->data)
  81.          root->right = deleteNode(root->right, data);
  82.    else{
  83.       if (root->left == NULL){
  84.          struct node *temp = root->right;
  85.          free(root);
  86.          return temp;
  87.       }
  88.       else if (root->right == NULL){
  89.          struct node *temp = root->left;
  90.          free(root);
  91.          return temp;
  92.       }
  93.       struct node* temp = minValueNode(root->right);
  94.       root->data = temp->data;
  95.       root->right = deleteNode(root->right, temp->data);
  96.    }
  97.    return root;
  98. }
  99.  
  100. int main() {
  101.  
  102.   struct node *root = NULL;
  103.   int n;
  104.   cin >> n;
  105.   for(int i=1; i<=n; i++){
  106.    int a;
  107.    cin >> a;
  108.   root = in_sert(root , a);
  109.  
  110.   }
  111.  
  112.  
  113.   cout << "preorder traversal:  ";
  114.   traversePreOrder(root);
  115.   cout << endl;
  116.  
  117.   cout << "\nInorder traversal:  ";
  118.   traverseInOrder(root);
  119.   cout << endl;
  120.  
  121.   cout << "\nPostorder traversal:  ";
  122.   traversePostOrder(root);
  123.   cout << endl;
  124.  
  125.   int b,c;
  126.   cin >> b;
  127.   root = deleteNode(root , b);
  128.  
  129.   cout << "\nInorder traversal:  ";
  130.   traverseInOrder(root);
  131.   cout << endl;
  132.  
  133.   return 0;
  134. }
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement