Given a binary tree, flatten it into a linked list. After flattening, the 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
Approach: An approach using recursion has already been discussed in the previous post. A pre-order traversal of the binary tree using stack has been implied in this approach. In this traversal, every time a right child is pushed in the stack, the right child is made equal to the left child and left child is made equal to NULL. If the right child of the node becomes NULL, the stack is popped and the right child becomes the popped value from the stack. The above steps are repeated until the size of the stack is zero or root is NULL.
Below is the implementation of the above approach:
The Inorder traversal after flattening binary tree 1 2 3 4 5 6
Time Complexity: O(N)
Auxiliary Space: O(Log N)
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. 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.
- Flatten a binary tree into linked list
- Given a binary tree, print all root-to-leaf paths
- Write a Program to Find the Maximum Depth or Height of a Tree
- Iterative Preorder Traversal of an N-ary Tree
- Find first node of loop in a linked list
- C++ Program to implement Symbol Table
- Iterative Segment Tree (Range Maximum Query with Node Update)
- Print the DFS traversal step-wise (Backtracking also)
- Queries to find maximum product pair in range with updates
- Number of elements greater than K in the range L to R using Fenwick Tree (Offline queries)