Tree Depth-First Search (DFS)

Trees & Graphs

Recursive top-down and bottom-up traversals on hierarchical structures

351 problems·40 Easy·223 Medium·88 Hard
Pattern Study Guide & Cheat Sheet
▼

Traverse binary or general trees by recurring deep along branches, computing subtree metrics bottom-up (postorder) or passing state top-down (preorder).

Core Invariant: Recursive Trust: Assume `dfs(node.left)` and `dfs(node.right)` return the correct subtree answers. Combine them at `node` with the base case (`if not node: return base_val`).

Recognize it (Keywords & Signals)
  • Maximum / minimum depth of binary tree
  • Invert / clone binary tree
  • Diameter of binary tree
  • Lowest common ancestor (LCA)
  • Path sum / maximum path sum across branches
  • Check balanced binary tree
When NOT to use

Level-by-level processing or shortest path in terms of edge counts (Tree BFS is cleaner).

How to solve (Step-by-step)
  1. 1.Handle base case: `if not node: return 0` (or `None`, `True`).
  2. 2.Recursively solve left subtree: `left = dfs(node.left)`.
  3. 3.Recursively solve right subtree: `right = dfs(node.right)`.
  4. 4.Combine results at parent: e.g., update global variable `self.max_diameter = max(self.max_diameter, left + right)`.
  5. 5.Return single-branch contribution upward: `return 1 + max(left, right)`.
Watch for (Interview Traps)
  • Mixing up what is returned upward vs what updates the global answer (e.g. returning both branches to parent)
  • Recursion limit exceeded on deeply skewed trees (Python default limit is 1000)
  • Forgetting to handle `node is None` as base case
Bottom-Up Postorder Tree DFS (Diameter / Path Metric)
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def diameter_of_binary_tree(root: TreeNode | None) -> int:
    max_diameter = 0
    
    def dfs(node: TreeNode | None) -> int:
        nonlocal max_diameter
        if not node:
            return 0  # Height of empty subtree
            
        # Postorder: solve children first
        left_height = dfs(node.left)
        right_height = dfs(node.right)
        
        # Invariant: longest path through current node spans both subtrees
        max_diameter = max(max_diameter, left_height + right_height)
        
        # Return single branch height upward to parent
        return 1 + max(left_height, right_height)
        
    dfs(root)
    return max_diameter
Cost
O(N) visits each node once · O(H) call stack where H is tree height (O(log N) balanced, O(N) worst-case skewed) (Avoids O(N^2) parent traversals.)
Canonical problems
#104 Maximum Depth of Binary Tree: 1 + max(dfs(left), dfs(right))
#226 Invert Binary Tree: Swap node.left and node.right recursively
#543 Diameter of Binary Tree: Combine left and right depths at each node
#236 Lowest Common Ancestor of a Binary Tree: Return node if target found in both subtrees
Medium·93 companies·Max freq 100%·Acc 64.7%
SnapAndurilTikTok+90
Medium·52 companies·Max freq 100%·Acc 51.8%
NordstromGravitonState Farm+49
Medium·42 companies·Max freq 100%·Acc 47.7%
FaireKaratUber+39
Medium·40 companies·Max freq 100%·Acc 55.9%
instabaseZenefitsSnowflake+37
Hard·30 companies·Max freq 100%·Acc 42.5%
BaiduDoorDashWix+27
Hard·27 companies·Max freq 100%·Acc 61.1%
YahooHiveNeetCode 150+24
Hard·26 companies·Max freq 100%·Acc 44.7%
PinterestHopperNetflix+23
Hard·26 companies·Max freq 100%·Acc 0.4%
UberXPocket Gems+23
Medium·25 companies·Max freq 88%·Acc 36.0%
WixNeetCode 150NeetCode 150+22
Medium·24 companies·Max freq 100%·Acc 69.7%
NewsBreakAirwallexMeta+21
Easy·24 companies·Max freq 88%·Acc 65.8%
MetaWixNeetCode 150+21
Medium·23 companies·Max freq 100%·Acc 42.2%
HTCMakeMyTripStripe+20
Medium·22 companies·Max freq 100%·Acc 74.1%
GrubhubSchlumbergerRoku+19
Easy·21 companies·Max freq 100%·Acc 78.4%
YahooNeetCode 150NeetCode 150+18
Medium·21 companies·Max freq 100%·Acc 65.7%
FlexportPocket GemsWix+18
Hard·21 companies·Max freq 93%·Acc 0.6%
DoorDashWeRideDuolingo+18
Medium·20 companies·Max freq 100%·Acc 65.8%
MixpanelHBOX+17
Medium·20 companies·Max freq 100%·Acc 73.0%
GojekNeetCode 150NeetCode 150+17
Medium·20 companies·Max freq 89%·Acc 67.8%
OktaWixZepto+17
Medium·19 companies·Max freq 100%·Acc 64.1%
SigmoidNutanixAdobe+16
Medium·18 companies·Max freq 100%·Acc 68.5%
SpaceXTexas InstrumentsGoldman Sachs+15
Medium·18 companies·Max freq 100%·Acc 59.6%
McKinseyTower Research CapitalTower Research Capital+15
Hard·18 companies·Max freq 90%·Acc 56.9%
SnapSnapMoloco+15
Medium·18 companies·Max freq 83%·Acc 61.6%
GrabDocusignByteDance+15
Hard·17 companies·Max freq 100%·Acc 0.5%
GravitonDE ShawMathWorks+14
Medium·17 companies·Max freq 88%·Acc 70.7%
MetaWixNeetCode 150+14
Medium·17 companies·Max freq 88%·Acc 0.5%
DatadogNeetCode 150NeetCode 150+14
Medium·16 companies·Max freq 100%·Acc 70.9%
XXNeetCode 150+13
Medium·15 companies·Max freq 100%·Acc 61.2%
Urban CompanyServiceNowNeetCode 150+12
Medium·15 companies·Max freq 88%·Acc 77.0%
UberNeetCode 150NeetCode 150+12
Medium·15 companies·Max freq 87%·Acc 0.5%
PornhubMolocoNeetCode 150+12
Hard·14 companies·Max freq 100%·Acc 0.4%
DropboxNCRBNY Mellon+11
Medium·14 companies·Max freq 100%·Acc 0.7%
blinkitShareChatServiceNow+11
Medium·14 companies·Max freq 63%·Acc 60.5%
UberWalmart LabsSnap+11
Hard·13 companies·Max freq 100%·Acc 39.5%
GravitonLucidCisco+10
Medium·13 companies·Max freq 92%·Acc 0.6%
SnapTikTokSnap+10
Medium·13 companies·Max freq 88%·Acc 56.1%
oyoDocusignZIP+10
Easy·13 companies·Max freq 88%·Acc 0.7%
CriteoQualtricsAmazon+10
Easy·13 companies·Max freq 85%·Acc 67.5%
NeetCode 150NeetCode 150Blind 75+10
Medium·13 companies·Max freq 83%·Acc 69.1%
NeetCode 150NeetCode 150Blind 75+10
Medium·13 companies·Max freq 77%·Acc 52.8%
SamsungMeeshoTikTok+10
Hard·13 companies·Max freq 75%·Acc 50.0%
RobloxMongoDBPinterest+10
Easy·13 companies·Max freq 68%·Acc 61.6%
VKLinkedInYandex+10
Medium·12 companies·Max freq 100%·Acc 50.1%
ZenefitsNeetCode 150NeetCode 150+9
Medium·12 companies·Max freq 100%·Acc 63.2%
PhonePeTekionMedia.net+9
Medium·12 companies·Max freq 100%·Acc 61.0%
Akuna CapitalNetflixNeetCode 150+9
Easy·12 companies·Max freq 100%·Acc 0.6%
ViasatNeetCode 150NeetCode 150+9
Easy·12 companies·Max freq 89%·Acc 0.5%
eBayJump TradingNeetCode 150+9
Medium·12 companies·Max freq 88%·Acc 0.6%
SnapSnapClari+9
Easy·12 companies·Max freq 87%·Acc 80.2%
NeetCode 150NeetCode 150Blind 75+9
50 displayed (of 50 matching)Filtered: All Companies

Top Companies Testing Tree Depth-First Search (DFS)

Browse company-specific interview problem lists and recency breakdowns:

Explore All 22 DSA Coding Patterns

Master core algorithmic patterns tested in FAANG & Big Tech coding interviews.

Patterns Hub

Tree Depth-First Search (DFS) frequently asked questions

What is the Tree Depth-First Search (DFS) pattern in coding interviews?

Recursive top-down and bottom-up traversals on hierarchical structures It is categorized under Trees & Graphs and features 351 curated interview problems across Easy (40), Medium (223), and Hard (88) difficulties.

Which tech companies frequently test Tree Depth-First Search (DFS)?

Companies frequently asking Tree Depth-First Search (DFS) questions include Google, Amazon, Meta, Microsoft, Bloomberg, Uber.

How do I master the Tree Depth-First Search (DFS) pattern?

Start by studying the algorithmic strategy and template code, then practice Easy and Medium problems before attempting Hard problems under timed conditions.