📖 Scenario: You are working with a simple family tree where each person can have up to two children. You want to visit all family members in a special order: first the left child, then the right child, and finally the parent. This order is called postorder traversal.
🎯 Goal: Build a small binary tree and write code to visit all nodes in postorder (left, right, root) and print their values.
📋 What You'll Learn
Create a class called Node with attributes value, left, and right
Create a tree with root value 1, left child 2, and right child 3
Create a function called postorder_traversal that visits nodes in left-right-root order
Print the values of nodes visited in postorder separated by spaces
💡 Why This Matters
🌍 Real World
Tree traversal is used in many areas like file system navigation, expression evaluation, and organizing hierarchical data.
💼 Career
Understanding tree traversal is important for software developers working with data structures, algorithms, and system design.
Progress0 / 4 steps
1
Create the Node class and build the tree
Create a class called Node with an __init__ method that takes value, left, and right parameters. Then create three nodes: root with value 1, left_child with value 2, and right_child with value 3. Connect left_child and right_child as the left and right children of root respectively.
DSA Python
Hint
Remember to define the Node class with __init__ method and create nodes with correct values and connections.
2
Create a helper list to store traversal results
Create an empty list called result that will store the values of nodes visited during the postorder traversal.
DSA Python
Hint
Just create an empty list named result to hold the traversal output.
3
Write the postorder traversal function
Define a function called postorder_traversal that takes a node as input. Inside the function, if node is not None, first call postorder_traversal recursively on node.left, then on node.right, and finally append node.value to the result list.
DSA Python
Hint
Remember postorder means visit left child, then right child, then the node itself.
4
Run traversal and print the result
Call the function postorder_traversal with root as argument. Then print the result list values separated by spaces using print(*result).
DSA Python
Hint
Call the traversal function on root and print the result list values separated by spaces.
Practice
(1/5)
1. What is the order of nodes visited in a postorder tree traversal?
easy
A. Root node, Left subtree, Right subtree
B. Right subtree, Left subtree, Root node
C. Root node, Right subtree, Left subtree
D. Left subtree, Right subtree, Root node
Solution
Step 1: Understand postorder traversal definition
Postorder traversal visits nodes in the order: left subtree first, then right subtree, and finally the root node.
Step 2: Match the order with options
Left subtree, Right subtree, Root node matches the order Left, Right, Root exactly.
Final Answer:
Left subtree, Right subtree, Root node -> Option D
Quick Check:
Postorder = Left, Right, Root [OK]
Hint: Remember: postorder ends with the root node [OK]
Common Mistakes:
Confusing postorder with preorder or inorder
Visiting root node first instead of last
Swapping left and right subtree order
2. Which of the following Python function headers correctly defines a postorder traversal method for a binary tree node root?
easy
A. def postorder(root):
B. def preorder(root):
C. def inorder(root):
D. def traverse(root):
Solution
Step 1: Identify the function name for postorder traversal
The function name should clearly indicate postorder traversal, so postorder is correct.
Step 2: Check the parameter
The parameter root is standard for the current node in tree traversal functions.
Final Answer:
def postorder(root): -> Option A
Quick Check:
Function name matches traversal type [OK]
Hint: Function name should match traversal type exactly [OK]
Common Mistakes:
Using wrong traversal names like preorder or inorder
Missing the root parameter
Using generic names that don't specify traversal
3. Given the binary tree:
1
/ \
2 3
/ \
4 5
What is the output of the postorder traversal?
medium
A. [4, 5, 2, 3, 1]
B. [1, 3, 2, 4, 5]
C. [2, 4, 5, 3, 1]
D. [4, 2, 5, 3, 1]
Solution
Step 1: Traverse left subtree of root (1)
Left subtree rooted at 2: postorder is left (4), right (5), root (2) -> [4, 5, 2]
Step 2: Traverse right subtree of root (1)
Right subtree rooted at 3 has no children, so postorder is [3]
Step 3: Combine left, right, and root
Full postorder: left subtree [4, 5, 2], right subtree [3], root [1] -> [4, 5, 2, 3, 1]
Final Answer:
[4, 5, 2, 3, 1] -> Option A
Quick Check:
Postorder = Left, Right, Root [OK]
Hint: Visit left subtree fully, then right, then root last [OK]
Common Mistakes:
Visiting root before children
Mixing up left and right subtree order
Listing nodes in preorder or inorder instead
4. The following code attempts a postorder traversal but produces incorrect output. What is the error?
def postorder(root):
if root:
print(root.data)
postorder(root.left)
postorder(root.right)
medium
A. The left and right subtree calls are swapped
B. The function does not check if root is None
C. The root node is printed before traversing children
D. The function should return a list instead of printing
Solution
Step 1: Analyze the order of print and recursive calls
The code prints root.data first, then traverses left and right subtrees. This is preorder traversal order.
Step 2: Identify correct postorder sequence
Postorder requires visiting left subtree, then right subtree, then printing root last.
Final Answer:
The root node is printed before traversing children -> Option C
Quick Check:
Print after children calls for postorder [OK]
Hint: Print root after left and right calls for postorder [OK]
Common Mistakes:
Printing root before children (preorder mistake)
Not handling empty nodes properly
Swapping left and right subtree calls
5. You want to collect all node values of a binary tree in postorder traversal into a list. Which code snippet correctly implements this?
hard
A. def postorder(root):
result = []
if root:
result.append(root.data)
result += postorder(root.left)
result += postorder(root.right)
return result
B. def postorder(root):
result = []
if root:
result += postorder(root.left)
result += postorder(root.right)
result.append(root.data)
return result
C. def postorder(root):
if root is None:
return []
return [root.data] + postorder(root.left) + postorder(root.right)
D. def postorder(root):
if root is None:
return []
return postorder(root.left) + [root.data] + postorder(root.right)
Solution
Step 1: Check the order of appending nodes
def postorder(root):
result = []
if root:
result += postorder(root.left)
result += postorder(root.right)
result.append(root.data)
return result appends left subtree results, then right subtree results, then root data last, matching postorder.
Step 2: Verify return of combined list
def postorder(root):
result = []
if root:
result += postorder(root.left)
result += postorder(root.right)
result.append(root.data)
return result returns the combined list correctly after recursive calls.
Final Answer:
def postorder(root):
result = []
if root:
result += postorder(root.left)
result += postorder(root.right)
result.append(root.data)
return result -> Option B
Quick Check:
Left + Right + Root order in list [OK]
Hint: Append root after left and right recursive results [OK]
Common Mistakes:
Appending root before children (preorder)
Incorrect list concatenation order
Not returning the combined list properly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.