Skip to content

Commit 146fb43

Browse files
committed
Week 15: 572. Subtree of Another Tree Solution
1 parent 604bb50 commit 146fb43

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

subtree-of-another-tree/doh6077.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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

0 commit comments

Comments
 (0)