Convert BST to double linked lists in order
#include <iostream> #include <cstdlib> struct BSTNode{ int v; struct BSTNode *left,*right; }; struct BSTNode *root=NULL,*head=NULL,*tail=NULL; struct BSTNode* createNode(int data){ struct BSTNode *newNode; newNode=(struct BSTNode*)malloc(sizeof(struct BSTNode)); newNode->v=data; newNode->left=NULL; newNode->right=NULL; return newNode; } void insertion(struct BSTNode **node,int data){ if(*node==NULL){ *node=createNode(data); }else if(data<(*node)->v){ insertion(&(*node)->left,data); }else if(data>(*node)->v){ insertion(&(*node)->right,data); } } void traverse(struct BSTNode *node){ if(node!=NULL){ traverse(node->left); std::cout<<node->v; traverse(node->right); } return; } void helper(struct BSTNode **h, struct BSTNode **t, struct BSTNode *root){ BSTNode *lt=NULL,*rh=NULL; if(root==NULL){ *h=NULL;*t=NULL; return; } helper(h,<,root->left); helper(&rh,t,root->right); if(lt!=NULL){ lt->right=root; root->left=lt; }else{ *h=root; } if(rh!=NULL){ root->right=rh; rh->left=root; }else{ *t=root; } } int main(){ int data,ch; insertion(&root,10); insertion(&root,16); insertion(&root,8); insertion(&root,20); insertion(&root,21); traverse(root); helper(&head,&tail,root); std::cout<<head->right->v; std::cin>>data; }