File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ from collections import deque
2+ from typing import Optional
3+
4+ # class TreeNode:
5+ # def __init__(self, val=0, left=None, right=None):
6+ # self.val = val
7+ # self.left = left
8+ # self.right = right
9+ # 572. Subtree of Another Tree
10+ # https://leetcode.com/problems/subtree-of-another-tree/description/
11+ class Solution :
12+ def isSubtree (self , root : Optional [TreeNode ], subRoot : Optional [TreeNode ]) -> bool :
13+ # Use BFS => Queue
14+ # Edge cases
15+ if subRoot is None :
16+ return True
17+ if root is None :
18+ return False
19+
20+ def helper (node : Optional [TreeNode ], subNode : Optional [TreeNode ]) -> bool :
21+ if node is None and subNode is None :
22+ return True
23+ if node is None or subNode is None :
24+ return False
25+ if node .val != subNode .val :
26+ return False
27+ return helper (node .left , subNode .left ) and helper (node .right , subNode .right )
28+
29+ q = deque ([root ])
30+
31+ while q :
32+ curr = q .popleft ()
33+
34+ # Only attempt full compare when root values match
35+ if curr .val == subRoot .val and helper (curr , subRoot ):
36+ return True
37+
38+ if curr .left :
39+ q .append (curr .left )
40+ if curr .right :
41+ q .append (curr .right )
42+
43+ return False
You can’t perform that action at this time.
0 commit comments