By Fatskills Exam Guides Team — the exam nerds behind 28,500+ quizzes and 2.1M practice questions across 500+ global exams.
"This pattern appears in 1 out of every 3 FAANG onsite interviews—master it, and you prove you can handle recursion, stacks, and tree traversals with surgical precision."
Before diving in, ensure you understand: 1. Binary Tree Structure – Nodes, left/right children, root, leaf nodes. 2. Recursion – Call stack, base cases, recursive cases. 3. Stack Data Structure – LIFO (Last-In-First-Out) for iterative traversals.
traverse(node.left); visit(node); traverse(node.right)
visit(node); traverse(node.left); traverse(node.right)
traverse(node.left); traverse(node.right); visit(node)
prev
Follow this exact order for every traversal problem:
if not node: return
None
root = None
O(n)
O(h)
h
Problem: Given a binary tree, return its inorder traversal (left-root-right).
node
def inorderTraversal(root): res = [] def traverse(node): if not node: return traverse(node.left) # Left res.append(node.val) # Root traverse(node.right) # Right traverse(root) return res
Problem: Given a binary tree, return its preorder traversal (root-left-right) iteratively.
def preorderTraversal(root): if not root: return [] stack, res = [root], [] while stack: node = stack.pop() res.append(node.val) # Visit root if node.right: # Push right first stack.append(node.right) if node.left: # Then left (processed first) stack.append(node.left) return res
Problem: Given a binary tree, return its postorder traversal (left-right-root) iteratively using only one stack.
def postorderTraversal(root): if not root: return [] stack, res = [root], [] prev = None while stack: node = stack[-1] # Peek # If coming down from parent (no children processed yet) if not prev or prev.left == node or prev.right == node: if node.left: # Go left stack.append(node.left) elif node.right: # Go right stack.append(node.right) # If coming up from left child (right exists but not processed) elif node.left == prev and node.right: stack.append(node.right) # If coming up from right child (process root) else: res.append(node.val) stack.pop() prev = node return res
node.left
node.right
"Alright, let’s lock this in. For any tree traversal problem, follow this checklist:
Memorize the code templates, and you’ll crush any tree traversal question in under 10 minutes. Now go practice!
You’ve got this! ?
Join 4M+ learners. Unlock unlimited quizzes, wrong-answer tracking, flashcards + reminders, study guides, and 1-on-1 challenges.