DEV Community

tracelit
tracelit

Posted on • Originally published at tracelit.dev

LeetCode 572: Subtree Of Another Tree — Step-by-Step Visual Trace

Medium — Binary Tree | Depth-First Search | Tree Traversal | Recursion

The Problem

Given the roots of two binary trees, determine if the second tree (subRoot) is a subtree of the first tree (root). A subtree must include all descendants of a node in the original tree.

Approach

The solution uses a recursive approach with two helper functions: first traverse each node in the main tree, then at each node check if the subtrees rooted at that node are identical using a tree comparison function. This combines tree traversal with tree equality checking.

Time: O(m * n) · Space: O(max(m, n))

Code

class Solution:
    def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
        if not s:
            return False
        if self.isSameTree(s, t):
            return True
        return self.isSubtree(s.left, t) or self.isSubtree(s.right, t)

    def isSameTree(self, p, q):
        if not p and not q:
            return True
        if not p or not q or p.val != q.val:
            return False
        return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
Enter fullscreen mode Exit fullscreen mode

Watch It Run

Watch the algorithm run step by step

Watch the algorithm run step by step

Open interactive visualization

Try it yourself: Open TraceLit and step through every line.


Built with TraceLit — the visual algorithm tracer for LeetCode practice.

Top comments (0)