Skip to content

Commit e4563b5

Browse files
committed
solve: Subtree of Another Tree
1 parent 93eada4 commit e4563b5

File tree

1 file changed

+49
-6
lines changed

1 file changed

+49
-6
lines changed
Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,56 @@
11
"""
22
Constraints:
3-
-
3+
- The number of nodes in the root tree is in the range [1, 2000].
4+
- The number of nodes in the subRoot tree is in the range [1, 1000].
5+
- -10^4 <= root.val <= 10^4
6+
- -10^4 <= subRoot.val <= 10^4
47
5-
Time Complexity:
6-
-
8+
Time Complexity: O(m * n)
9+
- m: root์˜ ๋…ธ๋“œ ์ˆ˜
10+
- n: subRoot์˜ ๋…ธ๋“œ ์ˆ˜
711
8-
Space Complexity:
9-
-
12+
Space Complexity: O(m)
13+
- ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ์ตœ๋Œ€ ๊นŠ์ด = root์˜ ๋†’์ด(?)
1014
1115
ํ’€์ด๋ฐฉ๋ฒ•:
12-
1.
16+
1. Base case ์ฒ˜๋ฆฌ:
17+
- subRoot๊ฐ€ ์—†์„ ๋•Œ โ†’ True
18+
- root๊ฐ€ ๋นˆ ํŠธ๋ฆฌ์ด๊ณ , subRoot๊ฐ€ ์žˆ์„ ๋•Œ โ†’ False
19+
2. ๊ฐ ๋…ธ๋“œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋™์ผํ•œ ํŠธ๋ฆฌ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ํ•จ์ˆ˜ ํ™œ์šฉ:
20+
- isSameTree ํ•จ์ˆ˜: ๋‘ ํŠธ๋ฆฌ๊ฐ€ ๋™์ผํ•œ์ง€ ์ฒดํฌ
21+
- ํ˜„์žฌ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๊ฐ™์€์ง€ ํ™•์ธ
22+
- ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์ž์‹ ๊ฒ€์‚ฌ
23+
3. ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ์—์„œ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฒ€์‚ฌ:
24+
- ํ˜„์žฌ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ subRoot์™€ ๊ฐ™์€์ง€ ํ™•์ธ
25+
- ์•„๋‹ˆ๋ฉด ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฒ€์‚ฌ
1326
"""
27+
# Definition for a binary tree node.
28+
# class TreeNode:
29+
# def __init__(self, val=0, left=None, right=None):
30+
# self.val = val
31+
# self.left = left
32+
# self.right = right
33+
class Solution:
34+
def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
35+
if not subRoot:
36+
return True
37+
38+
if not root:
39+
return False
40+
41+
if self.isSameTree(root, subRoot):
42+
return True
43+
44+
return self.isSubtree(root.left, subRoot) or self.isSubtree(root.right, subRoot)
45+
46+
def isSameTree(self, p: TreeNode, q: TreeNode):
47+
if not p and not q:
48+
return True
49+
50+
if not p or not q:
51+
return False
52+
53+
if p.val != q.val:
54+
return False
55+
56+
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

0 commit comments

Comments
ย (0)