Given a binary tree, flatten it into linked list in-place. Usage of auxiliary data structure is not allowed. After flattening, left of each node should point to NULL and right should contain next node in level order.
Input : 1 / \ 2 5 / \ \ 3 4 6 Output : 1 \ 2 \ 3 \ 4 \ 5 \ 6 Input : 1 / \ 3 4 / 2 \ 5 Output : 1 \ 3 \ 4 \ 2 \ 5
Simple Approach: A simple solution is to use Level Order Traversal using Queue. In level order traversal, keep track of previous node. Make current node as right child of previous and left of previous node as NULL. This solution requires queue, but question asks to solve without additional data structure.
Efficient Without Additional Data StructureRecursively look for the node with no grandchildren and both left and right child in the left sub-tree. Then store node->right in temp and make node->right=node->left. Insert temp in first node NULL on right of node by node=node->right. Repeat until it is converted to linked list.
The Inorder traversal after flattening binary tree 1 2 3 4 5 6
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
- Level Order Tree Traversal
- Flatten a binary tree into linked list | Set-2
- Write a program to Delete a Tree
- Convert a given Binary Tree to Doubly Linked List | Set 1
- Amazon SDE-2 Interview Experience
- Count pairs in a binary tree whose sum is equal to a given value x
- Mu Sigma Interview On Campus
- Bank Of America (BA Continuum India Pvt. Ltd.) Campus Recruitment
- Bubble Sort On Doubly Linked List
- Reverse nodes of a linked list without affecting the special characters