If you know about pre-order traversal you know that it visits the root first and the subtrees later. If you know about in-order traversal you know that it visits the nodes in-order (duh), first the left subtree , then the root and finally the right subtree. The remaining combination is to operate on the root when you’re done with the subtrees. That’s what post-order traversal does.
Let’s see an example of printing all the nodes of a tree using post-order traversal:
Starting from the root the post-order traversal algorithm will visit the left subtree, the right subtree and then return to the root node when it’s done.
Output so far:
We visit the left subtree on node-9 and move on its own subtrees until we find the tree’s leaves.
Output so far:
When we reach node-2 there are no left and right subtrees so we print it
Output so far: 2
Same way with node-5
Output so far: 2, 5
We return to node-9 and since we’re done with its subtrees we print the value 9
Output so far: 2, 5, 9
Back to node-6. We haven’t yet visited its right subtree so on we go
Output so far: 2, 5, 9
Node-4 has no left subtree, so we visit its right-hand one.
Output so far: 2, 5, 9
We visit node-8’s left and right subtrees which are empty and then return to node-8 and print its value
Output so far: 2, 5, 9, 8
Now that we’re done with node-4’s subtrees we print its value
Output so far: 2, 5, 9, 8, 4
We’re done with both subtrees of our tree’s root, node-6. It’s time to print its value too.
Output so far: 2, 5, 9, 8, 4, 6
And that’s it. We’ve traversed the tree In a post-order fashion and have printed its nodes.
The algorithm that achieves that in C++ is the following: