We have discussed a simple iterative postorder traversal using two stacks in the previous post. In this post, an approach with only one stack is discussed.
The idea is to move down to leftmost node using left pointer. While moving down, push root and root’s right child to stack. Once we reach leftmost node, print it if it doesn’t have a right child. If it has a right child, then change root so that the right child is processed before.
Following is detailed algorithm.
1.1 Create an empty stack 2.1 Do following while root is not NULL a) Push root's right child and then root to stack. b) Set root as root's left child. 2.2 Pop an item from stack and set it as root. a) If the popped item has a right child and the right child is at top of stack, then remove the right child from stack, push the root back and set root as root's right child. b) Else print root's data and set root as NULL. 2.3 Repeat steps 2.1 and 2.2 while stack is not empty.
Following are the steps to print postorder traversal of the above tree using one stack.
1. Right child of 1 exists. Push 3 to stack. Push 1 to stack. Move to left child. Stack: 3, 1 2. Right child of 2 exists. Push 5 to stack. Push 2 to stack. Move to left child. Stack: 3, 1, 5, 2 3. Right child of 4 doesn't exist. ' Push 4 to stack. Move to left child. Stack: 3, 1, 5, 2, 4 4. Current node is NULL. Pop 4 from stack. Right child of 4 doesn't exist. Print 4. Set current node to NULL. Stack: 3, 1, 5, 2 5. Current node is NULL. Pop 2 from stack. Since right child of 2 equals stack top element, pop 5 from stack. Now push 2 to stack. Move current node to right child of 2 i.e. 5 Stack: 3, 1, 2 6. Right child of 5 doesn't exist. Push 5 to stack. Move to left child. Stack: 3, 1, 2, 5 7. Current node is NULL. Pop 5 from stack. Right child of 5 doesn't exist. Print 5. Set current node to NULL. Stack: 3, 1, 2 8. Current node is NULL. Pop 2 from stack. Right child of 2 is not equal to stack top element. Print 2. Set current node to NULL. Stack: 3, 1 9. Current node is NULL. Pop 1 from stack. Since right child of 1 equals stack top element, pop 3 from stack. Now push 1 to stack. Move current node to right child of 1 i.e. 3 Stack: 1 10. Repeat the same as above steps and Print 6, 7 and 3. Pop 1 and Print 1.
Post Order traversal of binary tree is [4, 5, 2, 6, 7, 3, 1]
Push directly root node two times while traversing to the left. While poping if you find stack top() is same as root then go for root->right else print root.
Post Order traversal of binary tree is: 4, 5, 2, 6, 7, 3, 1
This article is compiled by Aashish Barnwal. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Iterative Postorder traversal | Set 3
- Iterative Postorder Traversal | Set 1 (Using Two Stacks)
- Iterative Postorder Traversal of N-ary Tree
- Construct a BST from given postorder traversal using Stack
- Postorder traversal of Binary Tree without recursion and without stack
- Find n-th node in Postorder traversal of a Binary Tree
- Print Postorder traversal from given Inorder and Preorder traversals
- Find parent of given node in a Binary Tree with given postorder traversal
- Iterative Preorder Traversal
- Iterative Depth First Traversal of Graph
- Iterative Preorder Traversal of an N-ary Tree
- Iterative diagonal traversal of binary tree
- Iterative Boundary Traversal of Complete Binary tree
- Inorder Tree Traversal without recursion and without stack!
- Level order traversal in spiral form using stack and multimap
- Level order traversal in spiral form | Using one stack and one queue
- Inorder Non-threaded Binary Tree Traversal without Recursion or Stack
- Check if a binary tree is subtree of another binary tree using preorder traversal : Iterative
- Level order traversal of Binary Tree using Morris Traversal
- Infix to Postfix using different Precedence Values for In-Stack and Out-Stack
Improved By : ashishfk