Advertisement
rootUser

BST (OWN)

Jun 21st, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.16 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. typedef struct Node
  5. {
  6.     int data;
  7.     struct Node *prev, *next;
  8. } node;
  9.  
  10. node *root = NULL;
  11.  
  12. node* newNode(int);
  13. node* insertNode(node*,int);
  14. node* searchNode(node*,int);
  15. void Preorder(node*);
  16. void inorder(node*);
  17. void Postorder(node*);
  18.  
  19. int main(void)
  20. {
  21.     int choice,chooseRootNode;
  22.     node* result ;
  23.     cout<<"Enter root node for binary search tree : ";
  24.     cin>>chooseRootNode;
  25.     root = insertNode(root,chooseRootNode);
  26.     while(true)
  27.     {
  28.         cout<<"Menu : 1)Insert 2)Search 3)Pre-Order 4)In-Order 5)Post-Order 6)Exit"<<endl;
  29.         cout<<"Enter your choice : ";
  30.         cin>>choice;
  31.         switch(choice)
  32.         {
  33.         case 1:
  34.             cout<<"Enter (int) data to insert : ";
  35.             int chooseData1;
  36.             cin>>chooseData1;
  37.             insertNode(root,chooseData1);
  38.             break;
  39.  
  40.         case 2:
  41.             cout<<"Enter (int) data to search : ";
  42.             int chooseData2;
  43.             cin>>chooseData2;
  44.             // very special waring : result cannot be declared inside switch
  45.             // as it is a pointer type variable
  46.             result = searchNode(root,chooseData2);
  47.             if(result!=NULL)
  48.             {
  49.                 cout<<"Found"<<endl;
  50.             }
  51.             else
  52.             {
  53.                 cout<<"Not found"<<endl;
  54.             }
  55.             break;
  56.         case 3:
  57.             cout<<"Pre-Order : "<<endl;
  58.             Preorder(root);
  59.             cout<<endl;
  60.             break;
  61.         case 4:
  62.             cout<<"In-Order : "<<endl;
  63.             inorder(root);
  64.             cout<<endl;
  65.             break;
  66.         case 5:
  67.             cout<<"Post-Order : "<<endl;
  68.             Postorder(root);
  69.             cout<<endl;
  70.             break;
  71.         case 6:
  72.             return 0;
  73.             break;
  74.         default:
  75.             cout<<"Wrong selection"<<endl;
  76.             break;
  77.         }
  78.     }
  79.     return 0;
  80. }
  81. node* newNode(int item)
  82. {
  83.     node *temp = new node();
  84.     temp->data = item;
  85.     temp->prev = temp->next = NULL;
  86.     return temp;
  87. }
  88.  
  89. node* insertNode(node* node, int data)
  90. {
  91.  
  92.     if (node == NULL)
  93.     {
  94.         return newNode(data);
  95.     }
  96.     if (data < node->data)
  97.     {
  98.         node->prev  = insertNode(node->prev, data);
  99.     }
  100.     else if (data > node->data)
  101.     {
  102.         node->next = insertNode(node->next, data);
  103.     }
  104.     return node;
  105. }
  106.  
  107.  
  108. node* searchNode(node* root, int data)
  109. {
  110.  
  111.     if (root == NULL || root->data == data)
  112.     {
  113.         return root;
  114.     }
  115.     if (root->data < data)
  116.     {
  117.         return searchNode(root->next, data);
  118.     }
  119.     return searchNode(root->prev, data);
  120. }
  121.  
  122. void Postorder(node* node)
  123. {
  124.     if (node == NULL)
  125.     {
  126.         return;
  127.     }
  128.     Postorder(node->prev);
  129.     Postorder(node->next);
  130.     cout<<node->data<<" ";
  131. }
  132.  
  133. void Preorder(node* node)
  134. {
  135.     if (node == NULL)
  136.     {
  137.         return;
  138.     }
  139.     cout<<node->data<<" ";
  140.     Preorder(node->prev);
  141.     Preorder(node->next);
  142. }
  143.  
  144. void inorder(node *root)
  145. {
  146.     if (root != NULL)
  147.     {
  148.         inorder(root->prev);
  149.         cout<<root->data<<" ";
  150.         inorder(root->next);
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement