Concept Flow - Tree Traversal Postorder Left Right Root
Start at root
Traverse left subtree
Traverse right subtree
Visit root node
Done
The traversal visits left subtree first, then right subtree, and finally the root node.
func postorder(node *Node) {
if node == nil {
return
}
postorder(node.Left)
postorder(node.Right)
fmt.Println(node.Value)
}| Step | Operation | Node Visited | Action | Tree State (Visited Nodes) |
|---|---|---|---|---|
| 1 | Start at root | A | Traverse left subtree | [] |
| 2 | Traverse left subtree | B | Traverse left subtree | [] |
| 3 | Traverse left subtree | D | Traverse left subtree | [] |
| 4 | Traverse left subtree | nil | Return (no node) | [] |
| 5 | Traverse right subtree | nil | Return (no node) | [] |
| 6 | Visit node | D | Print D | [D] |
| 7 | Traverse right subtree | E | Traverse left subtree | [D] |
| 8 | Traverse left subtree | nil | Return (no node) | [D] |
| 9 | Traverse right subtree | nil | Return (no node) | [D] |
| 10 | Visit node | E | Print E | [D, E] |
| 11 | Visit node | B | Print B | [D, E, B] |
| 12 | Traverse right subtree | C | Traverse left subtree | [D, E, B] |
| 13 | Traverse left subtree | F | Traverse left subtree | [D, E, B] |
| 14 | Traverse left subtree | nil | Return (no node) | [D, E, B] |
| 15 | Traverse right subtree | nil | Return (no node) | [D, E, B] |
| 16 | Visit node | F | Print F | [D, E, B, F] |
| 17 | Traverse right subtree | G | Traverse left subtree | [D, E, B, F] |
| 18 | Traverse left subtree | nil | Return (no node) | [D, E, B, F] |
| 19 | Traverse right subtree | nil | Return (no node) | [D, E, B, F] |
| 20 | Visit node | G | Print G | [D, E, B, F, G] |
| 21 | Visit node | C | Print C | [D, E, B, F, G, C] |
| 22 | Visit node | A | Print A | [D, E, B, F, G, C, A] |
| Variable | Start | After Step 6 | After Step 11 | After Step 16 | After Step 21 | Final |
|---|---|---|---|---|---|---|
| Visited Nodes | [] | [D] | [D, E, B] | [D, E, B, F] | [D, E, B, F, G, C] | [D, E, B, F, G, C, A] |
| Current Node | A | B | B | C | C | A |
Postorder traversal visits nodes in this order: 1. Left subtree 2. Right subtree 3. Root node Use recursion to traverse left, then right, then print root. Stops when node is nil (no child). Common for deleting trees or postfix expressions.