Skip to content

Commit 9aede3e

Browse files
committed
subtree-of-another-tree solution
1 parent c34d9b3 commit 9aede3e

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
LeetCode 572. Subtree of Another Tree
3+
https://leetcode.com/problems/subtree-of-another-tree/
4+
5+
summary:
6+
root ํŠธ๋ฆฌ ์•ˆ์— subRoot ํŠธ๋ฆฌ์™€ ๋™์ผํ•œ ๊ตฌ์กฐ & ๊ฐ’์„ ๊ฐ€์ง„ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
7+
"""
8+
9+
# Definition for a binary tree node.
10+
# class TreeNode:
11+
# def __init__(self, val=0, left=None, right=None):
12+
# self.val = val
13+
# self.left = left
14+
# self.right = right
15+
class Solution:
16+
def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
17+
18+
# DFS
19+
# ์‹œ๊ฐ„๋ณต์žก๋„ O(n*m) : n = rootํŠธ๋ฆฌ ๋…ธ๋“œ ๊ฐœ์ˆ˜, m = subRootํŠธ๋ฆฌ ๋…ธ๋“œ ๊ฐœ์ˆ˜
20+
# ๊ณต๊ฐ„๋ณต์žก๋„ O(h1+h2) : h1 = root์˜ ์ตœ๋Œ€๋†’์ด(์ตœ์•…O(n)), h2 = subRoot์˜ ์ตœ๋Œ€๋†’์ด(์ตœ์•…O(m))
21+
# ๋‘ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ์™€ ๊ฐ’์ด ๊ฐ™์€์ง€ ํ™•์ธ
22+
def isSameTree(node1, node2):
23+
# ๋‘˜ ๋‹ค ์—†์œผ๋ฉด True
24+
if not node1 and not node2:
25+
return True
26+
# ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์—†์œผ๋ฉด False
27+
if not node1 or not node2:
28+
return False
29+
# ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด False
30+
if node1.val != node2.val:
31+
return False
32+
33+
# root ํŠธ๋ฆฌ๋ž‘ subRoot ํŠธ๋ฆฌ์˜ ์–‘์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์žฌ๊ท€ ํƒ์ƒ‰
34+
return isSameTree(node1.left, node2.left) and isSameTree(node1.right, node2.right)
35+
36+
# root ํŠธ๋ฆฌ๋ฅผ DFS๋กœ ๋Œ๋ฉด์„œ subRoot์™€ ๊ฐ™์€์ง€ ํ™•์ธ
37+
def dfs(node):
38+
if not node:
39+
return False
40+
if isSameTree(node, subRoot):
41+
return True
42+
43+
# root ํŠธ๋ฆฌ์˜ ์–‘์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ํƒ์ƒ‰
44+
return dfs(node.left) or dfs(node.right)
45+
46+
return dfs(root)

0 commit comments

Comments
ย (0)