# Convert a Binary Tree to a Circular Doubly Link List in C++

In this tutorial, we will be discussing a program to convert a binary tree to a circular doubly linked list.

For this, we will be provided with a binary tree. Our task will be to convert the left and right nodes to the left and right elements respectively. And take the inorder of the binary tree to be the sequence order of the circular linked list

## Example

Live Demo

#include<iostream>
using namespace std;
//node structure of the binary tree
struct Node{
struct Node *left, *right;
int data;
};
//appending rightlist to the end of leftlist
Node *concatenate(Node *leftList, Node *rightList){
//if one list is empty return the other list
if (leftList == NULL)
return rightList;
if (rightList == NULL)
return leftList;
Node *leftLast = leftList->left;
Node *rightLast = rightList->left;
//connecting leftlist to rightlist
leftLast->right = rightList;
rightList->left = leftLast;
leftList->left = rightLast;
rightLast->right = leftList;
return leftList;
}
Node *bTreeToCList(Node *root){
if (root == NULL)
return NULL;
Node *left = bTreeToCList(root->left);
Node *right = bTreeToCList(root->right);
root->left = root->right = root;
return concatenate(concatenate(left, root), right);
}
cout << "Circular Linked List is :\n";
do{
cout << itr->data <<" ";
itr = itr->right;
}
cout << "\n";
}
//creating new node and returning address
Node *newNode(int data){
Node *temp = new Node();
temp->data = data;
temp->left = temp->right = NULL;
return temp;
}
int main(){
Node *root = newNode(10);
root->left = newNode(12);
root->right = newNode(15);
root->left->left = newNode(25);
root->left->right = newNode(30);
root->right->left = newNode(36);
return 0;
}

## Output

Circular Linked List is :
25 12 30 10 36 15

Updated on: 02-Jan-2020

85 Views