# Flatten Binary Tree to Sorted Linked List

A flattened binary tree is a changed version of the normal binary tree, as all the nodes present are rearranged to create a linear structure. All the nodes in the tree are organized so that when traversing the tree from left to right, we observe the items in the same order as we would in a normal in-order traversal.

Flattening a binary tree can prove to be very useful when it comes to performing certain tasks, such as serializing or deserializing a tree or when we have to perform linear traversal or any other algorithm on the tree.

1. They also help in improving the memory storage and cache locality of the system.
2. By flattening a binary tree, we can easily replace the need for the left and right pointers in the tree.
3. It also improves the memory locality of the tree, such as the nodes in the linked list will be stored in the nearby locations.
4. Some algorithms and operations are much easier to implement in linear data structure rather than performing them on binary trees.

### Implementation

Output

A step-by-step explanation of the code

1. The code will begin by declaring the necessary header files for the conduction of the various operations of the program.
2. In the next step of the code, we begin by defining a structure called 'Node,' which represents a node in the binary tree with the following members; data and a pointer to the left and right node.
3. Next, we declare the print function in the program, which will take the node as a parameter and print the flattened tree. It traverses the tree using the right pointer and prints all the values present at each node.
4. Now, we have to declare the in-order function that will refer to a series of vectors and a node as a parameter. This function will further perform an in-order traversal of the binary tree.
5. Next, we declare a form function that usually takes 'pos' and 'node' as a reference. This is usually a helper function that builds a flattened binary tree.
6. We then move by declaring the 'flatten' function, and the primary role of this function is first to create a dummy node and then perform an in-order traversal of the tree and store the node's value.
7. In the primary function of the program, we construct a binary tree.
8. The flatten function is called with the tree's root as an argument, and the result is passed onto the print function to display the result.

### Example 2)

Output

A step-by-step explanation of the code

1. The code will begin by importing the main classes from 'java.util', including 'list', 'ArrayList', and 'Node'.
2. In the next step of the code, we begin by defining a structure called 'Node,' which represents a node in the binary tree with the following members; data and a pointer to the left and right node.
3. Next, we declare the print function in the program, which will take the node as a parameter and print the flattened tree. It traverses the tree using the right pointer and prints all the values present at each nod.
4. Now, we have to declare the in-order function that will refer to a series of vectors and a node as a parameter. This function will further perform an in-order traversal of the binary tree.
5. Next, we declare a form function that usually takes 'pos' and 'node' as a reference. This is usually a helper function that builds a flattened binary tree.
6. We then move by declaring the 'flatten' function, and the primary role of this function is first to create a dummy node and then perform an in-order traversal of the tree and store the node's value.
7. In the primary function of the program, we construct a binary tree.
8. The flatten function is called with the tree's root as an argument, and the result is passed onto the print function to display the result.

### Example 3)

Output

A step-by-step explanation of the code

1. The code will start by defining a structure for a binary tree called 'Node'. It has the following three members: a data value and a pointer to the left and right child.
2. In the next step of the code, we begin by defining a structure called 'Node,' which represents a node in the binary tree with the following members; data and a pointer to the left and right node.
3. Now, we have to declare the in-order function that will refer to a series of vectors and a node as a parameter. This function will further perform an in-order traversal of the binary tree.
4. Next, we declare a form function that usually takes 'pos' and 'node' as a reference. This is usually a helper function that builds a flattened binary tree.
5. We then move by declaring the 'flatten' function, and the primary role of this function is first to create a dummy node and then perform an in-order traversal of the tree and store the node's value.
6. In the primary function of the program, we construct a binary tree.
7. The flatten function is called with the tree's root as an argument, and the result is passed onto the print function to display the result.