Skip to content

Commit 9781dcf

Browse files
committed
same-tree solution (py)
1 parent c2410f2 commit 9781dcf

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

same-tree/hi-rachel.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from typing import Optional
2+
3+
# Definition for a binary tree node.
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+
10+
"""
11+
재귀 풀아
12+
TC: O(N), 양 트리의 각 노드를 상대로 재귀함수를 딱 1번씩만 호출하기 때문
13+
SC: O(N), 공간복잡도 = 콜스택의 최대 높이(노드의 수)
14+
"""
15+
class Solution:
16+
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
17+
# 둘 다 null이면 True 반환
18+
if not p and not q:
19+
return True
20+
# 둘 중 하나면 null이면 False 반환
21+
if not p or not q:
22+
return False
23+
# val이 서로 다르면 탐색 중단, False 반환
24+
if p.val != q.val:
25+
return False
26+
# 현재 node의 val이 같다면, 좌우측 자식 트리도 같은지 확인 -> 재귀 호출
27+
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
28+
29+
30+
"""
31+
스택 풀이
32+
TC: O(N)
33+
SC: O(N)
34+
"""
35+
36+
class Solution:
37+
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
38+
stack = [(p, q)]
39+
40+
while stack:
41+
p, q = stack.pop()
42+
if not p and not q:
43+
continue
44+
if not p or not q:
45+
return False
46+
if p.val != q.val:
47+
return False
48+
stack.append((p.left, q.left))
49+
stack.append((p.right, q.right))
50+
return True

0 commit comments

Comments
 (0)