Skip to content

Commit 132163f

Browse files
committed
validate binary search tree solution
1 parent 49c0cf3 commit 132163f

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+
/*
2+
[문제풀이]
3+
- node의 왼쪽은 작아야 한다.
4+
- node의 오른쪽은 커야 한다.
5+
- 2^31 - 1 까지면 int
6+
- 범위는 long
7+
8+
- dfs로 풀자 (O)
9+
time: O(N), space: O(N)
10+
11+
[회고]
12+
!!! int 범위이지만 비교를 위해서는 더 큰 단위가 필요하므로 Long을 사용해야 한다 !!!
13+
14+
leftMaxVal, rightMinVal 네이밍은
15+
왼쪽 노드는 root가 커야 해서 leftMaxVal,
16+
오른쪽 노드는 root가 작아야 해서 rightMinVal로
17+
조금 더 직관적으로 지어봤다. (조건문도 마찬가지)
18+
*/
19+
20+
/**
21+
* Definition for a binary tree node.
22+
* public class TreeNode {
23+
* int val;
24+
* TreeNode left;
25+
* TreeNode right;
26+
* TreeNode() {}
27+
* TreeNode(int val) { this.val = val; }
28+
* TreeNode(int val, TreeNode left, TreeNode right) {
29+
* this.val = val;
30+
* this.left = left;
31+
* this.right = right;
32+
* }
33+
* }
34+
*/
35+
class Solution {
36+
public boolean isValidBST(TreeNode root) {
37+
return dfs(root, Long.MAX_VALUE, Long.MIN_VALUE);
38+
}
39+
40+
private boolean dfs(TreeNode node, long leftMaxVal, long rightMinVal) {
41+
if (node == null) {
42+
return true;
43+
}
44+
45+
if (!(node.val < leftMaxVal) || !(node.val > rightMinVal)) {
46+
return false;
47+
}
48+
49+
return dfs(node.left, node.val, rightMinVal) && dfs(node.right, leftMaxVal, node.val);
50+
}
51+
}

0 commit comments

Comments
 (0)