# 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

```python
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)
```

## Watch It Run

> **[Open interactive visualization](https://tracelit.dev/app?trace=0572_subtree-of-another-tree)**

> **Try it yourself:** Open [TraceLit](https://tracelit.dev/app?trace=0572_subtree-of-another-tree) and step through every line.

---

*Built with [TraceLit](https://tracelit.dev) — the visual algorithm tracer for LeetCode practice.*
