I tried to learn dynamic programming before I understood recursion. That was a 3-week waste of time.
DSA has dependencies. Trees require understanding of recursion. Graphs require understanding of trees. DP requires understanding of recursion and subproblem thinking. If you learn in the wrong order, nothing makes sense.
After struggling with the wrong approach and then finding what works, here's the exact order that I wish someone had told me from the start.
One-Minute Decision: Where to Start
If you're a complete beginner:
Start at Phase 1 (Arrays & Strings). Don't skip ahead. The foundations matter.
If you already know a programming language well:
Skim Phase 1 quickly, then start Phase 2 (Hash Maps, Stacks, Queues).
If you've done some LeetCode but feel stuck:
You probably skipped a dependency. Go back to Recursion (Phase 3). Most people underlearn it.
If you're short on time (< 4 weeks):
Focus on Phases 1-3 only. Skip advanced graph algorithms and segment trees. Cover basic DP.
If you're targeting FAANG specifically:
Full roadmap through Phase 5. DP is non-negotiable.
The Learning Order That Works
The Dependency Graph
Phase 1: Arrays & Strings (Foundation)
↓
Phase 2: Hash Maps, Stacks, Queues, Linked Lists
↓
Phase 3: Recursion & Trees (Critical Checkpoint)
↓
Phase 4: Graphs & Backtracking
↓
Phase 5: Dynamic Programming (Builds on Everything)Why this order works:
- Each phase builds on the previous
- Recursion (Phase 3) is the critical gate—everything after requires it
- DP comes last because it synthesizes all prior concepts
Quick Timeline Table
| Phase | Topics | Time Needed | Prerequisites |
|---|---|---|---|
| Phase 1 | Arrays, Strings, Two Pointers, Sliding Window | 1-2 weeks | Basic programming |
| Phase 2 | Hash Maps, Stacks, Queues, Linked Lists | 1-2 weeks | Phase 1 |
| Phase 3 | Recursion, Binary Trees, BST | 2-3 weeks | Phase 2 (most important) |
| Phase 4 | Graphs, BFS/DFS, Backtracking | 2-3 weeks | Phase 3 |
| Phase 5 | Dynamic Programming (1D, 2D, common patterns) | 3-4 weeks | All previous phases |
Total realistic time: 10-14 weeks for comprehensive coverage
Phase 1: Foundations (Arrays & Strings)
What to Learn
Core concepts:
- Array manipulation (in-place, copies)
- String operations (slicing, building)
- Time complexity basics (O(n), O(n²), O(log n))
- Space complexity basics
Essential patterns:
- Two Pointers — Moving pointers from ends or same direction
- Sliding Window — Fixed or variable window tracking
- Prefix Sum — Precomputation for range queries
How Long It Takes
- If you know a language well: 1 week
- If you're new to programming: 2-3 weeks
What to Practice
Start with these problems:
- Two Sum (Hash Map version comes in Phase 2)
- Valid Palindrome
- Best Time to Buy and Sell Stock
- Container With Most Water
- Longest Substring Without Repeating Characters
Target: Solve 15-20 Easy/Medium array and string problems before moving on.
How to Know You're Ready
✅ You can recognize when Two Pointers applies
✅ You can implement Sliding Window without looking it up
✅ You understand time complexity of your solutions
✅ String manipulation feels natural
Phase 2: Core Data Structures
What to Learn
Hash Maps (Critical):
- When to use (lookup, counting, deduplication)
- Time complexity: O(1) average lookup
- Common patterns: frequency counting, two-sum style lookups
Stacks:
- LIFO principle
- Monotonic Stack pattern
- When to use: matching brackets, next greater element
Queues:
- FIFO principle
- Deque (double-ended queue)
- When to use: BFS, sliding window maximum
Linked Lists:
- Singly vs doubly linked
- Common operations: reversal, cycle detection, merge
- Two-pointer techniques for linked lists
How Long It Takes
- Typical: 1-2 weeks
- Speed through if: You have prior CS background
What to Practice
Hash Maps:
- Two Sum (proper solution)
- Group Anagrams
- Top K Frequent Elements
Stacks:
- Valid Parentheses
- Daily Temperatures
- Largest Rectangle in Histogram
Linked Lists:
- Reverse Linked List
- Linked List Cycle
- Merge Two Sorted Lists
Target: 20-25 problems across all structures.
How to Know You're Ready
✅ You can identify when a hash map helps
✅ You can implement basic stack/queue operations
✅ You can visualize linked list pointer manipulation
✅ You're comfortable with O(1) vs O(n) lookups
Phase 3: Recursion & Trees (The Critical Gate)
Why This Phase Is Critical
This is where most people get stuck. Everything after Phase 3 requires recursion:
- Tree problems = recursion
- Graph DFS = recursion
- Backtracking = recursion
- Many DP solutions = recursion with memoization
If recursion doesn't click, you can't progress. Spend extra time here.
What to Learn
Recursion fundamentals:
- Base case identification
- Recursive case logic
- Call stack visualization
- Time complexity of recursive solutions
Binary Trees:
- Tree traversal (preorder, inorder, postorder)
- Level-order traversal (BFS)
- Tree properties (height, depth, balanced)
- Recursive tree thinking
Binary Search Trees (BST):
- BST property (left < root < right)
- Search, insert, delete operations
- In-order traversal gives sorted order
How Long It Takes
- Typical: 2-3 weeks
- If recursion is new: Allow 3-4 weeks (don't rush)
What to Practice
Recursion warm-up:
- Fibonacci (naive, then with memoization)
- Factorial
- Power of Two
Binary Trees:
- Maximum Depth of Binary Tree
- Invert Binary Tree
- Same Tree
- Lowest Common Ancestor
- Binary Tree Level Order Traversal
BST:
- Validate Binary Search Tree
- Kth Smallest Element in a BST
- Convert Sorted Array to BST
Target: 25-30 problems. Don't move on until recursion is comfortable.
How to Know You're Ready
✅ You can write recursive solutions without debugging endlessly
✅ You can trace call stacks mentally
✅ You can identify base cases vs recursive cases
✅ Tree problems feel natural to approach recursively
Phase 4: Graphs & Backtracking
What to Learn
Graph Fundamentals:
- Graph representation (adjacency list, adjacency matrix)
- Directed vs undirected
- Weighted vs unweighted
Graph Traversal:
- BFS (Breadth-First Search) — for shortest path in unweighted graphs
- DFS (Depth-First Search) — for exploration, connectivity
Common Graph Patterns:
- Connected components (use DFS/BFS)
- Cycle detection
- Topological sort (for DAGs)
- Shortest path (BFS for unweighted, Dijkstra for weighted)
Backtracking:
- The template: explore → choose → recurse → unchoose
- When to use: generate all combinations, permutations, subsets
- Pruning to reduce search space
How Long It Takes
- Typical: 2-3 weeks
- If graphs are new: 3 weeks
What to Practice
Graph Basics:
- Number of Islands
- Clone Graph
- Pacific Atlantic Water Flow
BFS/DFS:
- Word Ladder
- Course Schedule (topological sort)
- Surrounded Regions
Backtracking:
- Subsets
- Permutations
- Combination Sum
- N-Queens
Target: 20-25 problems.
How to Know You're Ready
✅ You can model problems as graphs
✅ You know when to use BFS vs DFS
✅ You can write backtracking templates from memory
✅ You recognize cycle detection patterns
Phase 5: Dynamic Programming
Why DP Comes Last
DP is a synthesis of everything:
- It requires recursion skills (from Phase 3)
- It requires subproblem thinking (built from earlier phases)
- It requires pattern recognition (accumulated from all practice)
Don't start DP before completing Phases 1-4. It won't make sense.
What to Learn
DP Fundamentals:
- Overlapping subproblems
- Optimal substructure
- Top-down (memoization) vs bottom-up (tabulation)
1D DP Patterns:
- Climbing Stairs style (decisions at each step)
- House Robber style (skip or take)
- Longest Increasing Subsequence
2D DP Patterns:
- Grid traversal (Unique Paths)
- String matching (Edit Distance, LCS)
- Knapsack problems
Common DP Categories:
- Linear DP
- Interval DP
- State machine DP
- Tree DP (if time permits)
How Long It Takes
- Minimum: 3-4 weeks
- For FAANG-level: 4-6 weeks
- To feel comfortable: Ongoing (DP takes time to internalize)
What to Practice
1D DP basics:
- Climbing Stairs
- House Robber
- Maximum Subarray
- Coin Change
2D DP:
- Unique Paths
- Longest Common Subsequence
- Edit Distance
- Longest Palindromic Substring
Advanced patterns:
- Word Break
- Partition Equal Subset Sum
- Best Time to Buy and Sell Stock (all variations)
Target: 30-40 problems over several weeks.
How to Know You're Ready
✅ You can identify subproblems in new problems
✅ You can choose between top-down vs bottom-up
✅ You recognize common DP patterns
✅ Medium DP problems feel approachable (not terrifying)
The Realistic Timeline
Intensive Prep (15-20 hrs/week)
| Week | Focus | Goal |
|---|---|---|
| Week 1 | Phase 1: Arrays, Strings | 20 problems |
| Week 2 | Phase 2: Hash Maps, Stacks | 15 problems |
| Week 3 | Phase 2: Linked Lists, Queues | 10 problems |
| Week 4-5 | Phase 3: Recursion, Trees | 25 problems |
| Week 6-7 | Phase 4: Graphs, Backtracking | 20 problems |
| Week 8-10 | Phase 5: Dynamic Programming | 30 problems |
| Week 11-12 | Mixed review, mock interviews | Reinforce weak areas |
Total: 12 weeks, 120+ problems
Part-Time Prep (8-10 hrs/week)
| Weeks | Focus |
|---|---|
| Week 1-2 | Phase 1: Arrays, Strings |
| Week 3-4 | Phase 2: Hash Maps, Stacks, LL |
| Week 5-8 | Phase 3: Recursion, Trees |
| Week 9-12 | Phase 4: Graphs |
| Week 13-18 | Phase 5: DP |
| Week 19-20 | Review + Mocks |
Total: 20 weeks, 120+ problems
Common Learning Order Mistakes
Mistake #1: Starting with DP
What happens:
"I heard DP is hard, so I'll start with it to get it out of the way."
Why it fails:
DP requires recursion skills, subproblem thinking, and pattern recognition. Without earlier phases, it's impossible to understand.
The fix:
Save DP for Phase 5. You need the foundation.
Mistake #2: Skipping Recursion
What happens:
"I know loops. I'll skip recursion and come back later."
Why it fails:
Trees, graphs, backtracking, and DP ALL require recursion. You can't "come back later"—you'll be stuck immediately.
The fix:
Spend extra time on Phase 3. It's the gate to everything else.
Mistake #3: Random Problem Grinding
What happens:
"I'll just do random LeetCode problems until I'm ready."
Why it fails:
Without sequence, you'll hit advanced problems before you have the tools to solve them. Frustration → quitting.
The fix:
Follow the phases. Or use NeetCode's roadmap which follows similar ordering.
Mistake #4: Not Enough Problems Per Phase
What happens:
"I did 3 tree problems. Now I'll move to graphs."
Why it fails:
3 problems isn't enough for pattern internalization. You'll forget Phase 3 by the time you reach Phase 5.
The fix:
Minimum 15-20 problems per phase. 25-30 for critical phases (Recursion/Trees, DP).
What People Actually Ask
"Can I skip linked lists?"
Short answer: Mostly, yes.
Linked list problems are less common in modern interviews than they used to be. If you're short on time, spend minimal time here and focus on trees and graphs instead.
What to NOT skip about linked lists:
- Reversal technique (shows up in other contexts)
- Two-pointer for linked lists (fast/slow)
"Should I learn sorting algorithms?"
Short answer: Know the concepts, but you don't need to implement them.
What to know:
- Merge Sort: O(n log n), stable, uses extra space
- Quick Sort: O(n log n) average, in-place
- When each is appropriate
What you won't need:
- Implementing merge sort from scratch in interviews (use built-in sort)
- Obscure sorting algorithms (counting sort, radix sort unless specifically asked)
"How deep should I go into graphs?"
Short answer: BFS, DFS, and topological sort are essential. Dijkstra is good to know. Advanced algorithms (Bellman-Ford, Floyd-Warshall) are optional for most roles.
Minimum viable graph knowledge:
- BFS (shortest path in unweighted)
- DFS (exploration, cycle detection)
- Topological sort (dependency ordering)
- Union Find (connected components)
"Is 3 months enough to learn everything?"
Short answer: Yes, if you're consistent.
3 months with 15+ hours/week:
You can cover all phases and solve 150+ problems. That's sufficient for most interviews.
3 months with 5-8 hours/week:
Cover Phases 1-4 thoroughly. Touch on basic DP. You might need to continue DP practice during the job search.
Final Verdict: The Learning Order
The Sequence That Works
- Arrays & Strings — Build your foundation (1-2 weeks)
- Hash Maps, Stacks, Queues, Linked Lists — Core data structures (1-2 weeks)
- Recursion & Trees — THE critical checkpoint (2-3 weeks)
- Graphs & Backtracking — Advanced traversal (2-3 weeks)
- Dynamic Programming — Synthesis of everything (3-4 weeks)
The Rules I Wish I'd Known
- Don't skip phases. Dependencies exist for a reason.
- Recursion is the gate. Master Phase 3 before moving on.
- DP comes last. It builds on everything else.
- 15-20 problems per phase minimum. 3 problems isn't enough.
- Follow the order, not the interest. "DP looks interesting" is a trap.
One-Minute Decision
If you're just starting: Arrays → Hash Maps → Recursion → Trees → Graphs → DP
If you're stuck at Medium problems: Go back to Recursion. You probably skipped it.
If you have 4 weeks: Phases 1-3 only. Skip advanced graphs and DP depth.
If you have 3 months: Full roadmap. Master each phase.
Last updated: January 13, 2026. Based on personal learning experience (including the mistakes), teaching DSA to other engineers, and observing which learning paths lead to interview success. The timeline estimates assume focused practice—adjust for your schedule.
Want to Practice LeetCode Smarter?
LeetCopilot is a free browser extension that enhances your LeetCode practice with AI-powered hints, personalized study notes, and realistic mock interviews — all designed to accelerate your coding interview preparation.
Also compatible with Edge, Brave, and Opera
