# Binary Tree to CDLL

Binary trees are essential data structures in computer science that provide an organized method of storing and managing data. Circular Doubly Linked Lists (CDLLs), on the other hand, have a circular structure in which each node points to both its preceding and next node. Converting a binary tree to a CDLL entails rearranging the nodes of the tree into a circular doubly linked list while preserving the natural order. This page looks into the transformation's method, algorithms, and implementation specifics.

### Understanding Binary Trees and CDLLs:

A binary tree is a hierarchical data structure composed of nodes, each of which has at most two offspring, referred to as the left and right child. A CDLL, on the other hand, is a linked list in which the final node refers back to the first node and vice versa, resulting in a circular structure. A CDLL node carries data as well as two pointers: one to the next node and one to the previous node.

### Algorithm for Binary Tree to CDLL Conversion:

Input: Root node of the Binary Tree

1. Initialize Head and Tail Pointers:

• Initialize head and tail pointers of the resulting CDLL as NULL.

2. Define Utility Function:

• Create a utility function treeToCDLLUtil that takes the following parameters:
• The root of the binary tree
• Reference to the head pointer of the resulting CDLL
• Reference to the tail pointer of the resulting CDLL

3. Utility Function (treeToCDLLUtil):

• If the root is NULL, return.
• Recursively call treeToCDLLUtil for the left subtree.

4. Handle Current Node:

• Set head and tail pointers to the current node.

Else:

• Connect the tail->right to the current node.
• Connect the current node's left to tail.
• Update tail to the current node.

5. Handle Right Subtree:

• Recursively call treeToCDLLUtil for the right subtree.

• After both subtrees are processed, make the CDLL circular:

7. Return:

• Return from the utility function.
1. Main Function:
• Call the utility function treeToCDLLUtil with the root of the binary tree, head, and tail pointers

Output:

Output: