File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ https://leetcode.com/problems/subtree-of-another-tree/description/
3+
4+ 두 개의 이진 트리 root와 subRoot의 루트(최상위 노드)가 주어졌을 때,
5+ root의 하위 트리 중 subRoot와 동일한 구조와 값이 있는 경우 참을 반환하고 그렇지 않은 경우 거짓을 반환
6+
7+ TC: O(n * m), n: root의 노드 수, m: subRoot의 노드 수
8+ SC: O(n + m)
9+ """
10+
11+ from typing import Optional
12+
13+ # Definition for a binary tree node.
14+ class TreeNode :
15+ def __init__ (self , val = 0 , left = None , right = None ):
16+ self .val = val
17+ self .left = left
18+ self .right = right
19+
20+ class Solution :
21+ def isSubtree (self , root : Optional [TreeNode ], subRoot : Optional [TreeNode ]) -> bool :
22+ if not root :
23+ return False
24+ if not subRoot :
25+ return True
26+
27+ def isSameTree (p , q ):
28+ # 둘 중 하나라도 None 이면,
29+ if not p or not q :
30+ # 둘 다 None 일 때만 True
31+ return not p and not q
32+ # 같이 다르면 False
33+ if p .val != q .val :
34+ return False
35+ # 왼쪽과 오른쪽 서브트리를 재귀적으로 비교
36+ return isSameTree (p .left , q .left ) and isSameTree (p .right , q .right )
37+
38+ # root에서 시작해 subRoot와 동일한 구조의 트리인지 확인
39+ if isSameTree (root , subRoot ):
40+ return True
41+
42+ # 왼쪽 또는 오른쪽 서브트리 중 하나라도 subRoot와 같은 트리가 있는지 재귀 탐색
43+ return self .isSubtree (root .left , subRoot ) or self .isSubtree (root .right , subRoot )
You can’t perform that action at this time.
0 commit comments