#+ANKI_DECK: study_deck_02 * TODO 0572. Subtree of Another Tree :easy: :PROPERTIES: :NEETCODE: [[file:../../roadmap.org::*0572. Subtree of Another Tree][0572. Subtree of Another Tree]] :END: Given the roots of two binary trees ~root~ and ~subRoot~, return ~true~ if there is a subtree of ~root~ with the same structure and node values of~ subRoot~ and ~false~ otherwise. A subtree of a binary tree ~tree~ is a tree that consists of a node in ~tree~ and all of this node's descendants. The tree ~tree~ could also be considered as a subtree of itself. *Example 1:* #+begin_src Input: root = [3,4,5,1,2], subRoot = [4,1,2] Output: true #+end_src *Example 2:* #+begin_src Input: root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2] Output: false #+end_src *Constraints:* - The number of nodes in the ~root~ tree is in the range ~[1, 2000]~. - The number of nodes in the ~subRoot~ tree is in the range ~[1, 1000]~. - ~-10^{4} <= root.val <= 10^{4}~ - ~-10^{4} <= subRoot.val <= 10^{4}~ ** TODO Approach Write your approach here. ** TODO Python #+begin_src python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool: #+end_src ** TODO C++ #+begin_src cpp /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool isSubtree(TreeNode* root, TreeNode* subRoot) { } }; #+end_src