jain12

convert a BST into circular doubly linked list

Mar 28th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. class Node{
  5.   public:
  6.       int data;
  7.       Node *left,*right;
  8.       Node(int key){
  9.         data=key;
  10.         left=right=NULL;
  11.         }
  12.   };
  13.  
  14. class LLNode{
  15.   public:
  16.       int data;
  17.       LLNode *prev,*next;
  18.       LLNode(int key){
  19.          data=key;
  20.          prev=NULL,next=NULL;
  21.         }
  22.   };
  23.  
  24. LLNode* ConvertIntoDLL(Node *root){
  25.   if(root==NULL)
  26.     return NULL;
  27.   LLNode *head=new LLNode(root->data);
  28.   head->prev=ConvertIntoDLL(root->left);
  29.   if(head->prev!=NULL)
  30.     (head->prev)->next=head;
  31.   head->next=ConvertIntoDLL(root->right);
  32.   if(head->next!=NULL)
  33.     (head->next)->prev=head;
  34.   return head;
  35.   }
  36.  
  37. LLNode* ConvertIntoCDLL(Node*root){
  38.   if(root==NULL)
  39.      return NULL;
  40.   LLNode* first_node=ConvertIntoDLL(root);
  41.   LLNode* last_node=first_node;
  42.   while(first_node->prev!=NULL)
  43.      first_node=first_node->prev;
  44.   while(last_node->next!=NULL)
  45.         last_node=last_node->next;
  46.   first_node->prev=last_node;
  47.   last_node->next=first_node;
  48.   return first_node;
  49.   }
  50.  
  51. void Insert(Node **root_ref,int key){
  52.   if(*root_ref==NULL){
  53.     *root_ref=new Node(key);
  54.     return;
  55.     }
  56.   if((*root_ref)->data<key)
  57.     Insert(&((*root_ref)->right),key);
  58.   else
  59.      if((*root_ref)->data>key)
  60.        Insert(&((*root_ref)->left),key);
  61.   }
  62.  
  63. int main(){
  64.  Node *root=NULL;
  65.  Insert(&root,5);
  66.  Insert(&root,7);
  67.  Insert(&root,2);
  68.  Insert(&root,8);
  69.  LLNode *head=ConvertIntoCDLL(root);
  70.  LLNode *node=head;
  71.  do{
  72.     cout<<" "<<node->data;
  73.     node=node->next;
  74.    }while(node!=head);
  75.  }
Add Comment
Please, Sign In to add comment