Skip to content

Commit 841d91b

Browse files
committed
feat: validate-binary-search-tree 풀이 추가
1 parent 493acb6 commit 841d91b

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
9+
def validate(node, min_val, max_val):
10+
if not node:
11+
return True
12+
13+
if node.val <= min_val or node.val >= max_val:
14+
return False
15+
16+
return (validate(node.left, min_val, node.val) and
17+
validate(node.right, node.val, max_val))
18+
19+
return validate(root, float('-inf'), float('inf'))
20+
21+
22+
"""
23+
================================================================================
24+
풀이 과정
25+
================================================================================
26+
27+
[1차 시도] 단순 재귀
28+
────────────────────────────────────────────────────────────────────────────────
29+
4. left < node < right 체크를 해줘야하고
30+
5. 각 노드는 자신의 서브트리에서 최소값과 최대값을 가지고 있어야함
31+
6. 현재 노드보다 왼쪽은 작은 값, 오른쪽은 큰 값
32+
7. 재귀적으로 구현할 수 있음
33+
34+
def validate(node, min_val, max_val):
35+
if not node:
36+
return True
37+
38+
if node.val <= min_val or node.val >= max_val:
39+
return False
40+
41+
# 재귀적으로 왼쪽, 오른쪽 서브트리 체크
42+
# 왼쪽 서브트리는 현재 노드 값보다 작아야하고, 오른쪽 서브트리는 현재 노드 값보다 커야함
43+
return (validate(node.left, min_val, node.val) and
44+
validate(node.right, node.val, max_val))
45+
46+
return validate(root, float('-inf'), float('inf'))
47+
48+
8. 시간 복잡도: O(n) - 모든 노드를 한 번씩 방문
49+
9. 공간 복잡도: O(h) - 재귀 호출 스택 (h는 트리 높이)
50+
10. 재귀적으로 스택 오버플로우가 발생하는 것이 우려되면 iterative로 구현할 수 있음
51+
"""

0 commit comments

Comments
 (0)