Skip to content

Commit e73085e

Browse files
add post '(Leetcode) 98 - Validate Binary Search Tree'
1 parent 97359be commit e73085e

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

_posts/2024-06-10-leetcode-98.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
---
2+
layout: post
3+
title: (Leetcode) 98 - Validate Binary Search Tree
4+
categories: [스터디-알고리즘]
5+
tags:
6+
[
7+
자바,
8+
java,
9+
리트코드,
10+
Leetcode,
11+
알고리즘,
12+
algorithm,
13+
dfs,
14+
tree,
15+
bst,
16+
search,
17+
validate,
18+
]
19+
date: 2024-06-10 01:00:00 +0900
20+
toc: true
21+
---
22+
23+
기회가 되어 [달레님의 스터디](https://github.com/DaleStudy/leetcode-study)에 참여하여 시간이 될 때마다 한문제씩 풀어보고 있다.
24+
25+
[https://neetcode.io/practice](https://neetcode.io/practice)
26+
27+
---
28+
29+
[https://leetcode.com/problems/validate-binary-search-tree/](https://leetcode.com/problems/validate-binary-search-tree/)
30+
31+
## 내가 작성한 풀이
32+
33+
어떻게 해결할지 많은 고민을 하였다.
34+
35+
처음에는 그냥 단순히 부모와 자식간의 값의 비교하는 형태로 진행했었는데
36+
그렇게 하면 테스트를 통과하지 못한다.
37+
부모의 부모, 부모의 부모의 부모 ... 까지 고려해야한다.
38+
39+
그래서 해당 노드의 위치가 정상적인 위치인지 어떻게 고려할 수 있을지 규칙을 찾아보니 left로 갈 때 max를 자신으로, right로 갈 때는 min을 자신으로 삼아가면서 dfs를 진행하면 해결할 수 있다는 것을 알게되었다.
40+
41+
```java
42+
class Solution {
43+
public boolean isValidBST(TreeNode root) {
44+
return dfs(root.left, (long) Integer.MIN_VALUE - 1, root.val)
45+
&& dfs(root.right, root.val, (long) Integer.MAX_VALUE + 1);
46+
}
47+
48+
private boolean dfs(TreeNode node, long min, long max) {
49+
if (node == null) {
50+
return true;
51+
}
52+
53+
// left로 갈 때 max를 자신으로, right로 갈 때는 min을 자신으로
54+
if (!(dfs(node.left, min, node.val)
55+
&& dfs(node.right, node.val, max))) {
56+
return false;
57+
}
58+
59+
return node.val > min && node.val < max;
60+
}
61+
}
62+
```
63+
64+
특이한 점은 long을 사용했다는 점인데 문제에서 제시한 노드의 값 범위는 다음과 같다.
65+
66+
```
67+
-2^31 <= Node.val <= 2^31 - 1
68+
```
69+
70+
이 것은 정확하게 int의 범위와 일치하기 때문에 노드의 값이 Integer.MIN_VALUE, Integer.MAX_VALUE 일 경우 문제가 발생할 수 있는 여지가 있다.
71+
그래서 어쩔 수 없이 long으로 받도록 처리하였다.
72+
73+
### TC, SC
74+
75+
시간 복잡도는 O(n)이고, 공간 복잡도는 O(n)이다. 트리가 균등한 형태라면 공간복잡도가 O(logn) 에 가까워진다.

0 commit comments

Comments
 (0)