Skip to content

Commit 17447e1

Browse files
committed
add: #251 Validate Binary Search Tree
1 parent c800fff commit 17447e1

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
class TreeNode {
2+
val: number;
3+
left: TreeNode | null;
4+
right: TreeNode | null;
5+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6+
this.val = val === undefined ? 0 : val;
7+
this.left = left === undefined ? null : left;
8+
this.right = right === undefined ? null : right;
9+
}
10+
}
11+
12+
// 1번풀이
13+
function isValidBST1(root: TreeNode | null): boolean {
14+
const values: number[] = [];
15+
16+
// 중위노드 : 왼쪽 자식 -> 부모 노드 -> 오른쪽 자식
17+
function inorder(node: TreeNode | null) {
18+
if (!node) return null;
19+
const { val, left, right } = node;
20+
21+
inorder(left);
22+
values.push(val);
23+
inorder(right);
24+
}
25+
26+
inorder(root);
27+
28+
for (let i = 1; i < values.length; i++) {
29+
if (values[i] <= values[i - 1]) return false;
30+
}
31+
32+
return true;
33+
};
34+
35+
// 2번풀이 (배열 대신 변수 사용)
36+
function isValidBST2(root: TreeNode | null): boolean {
37+
let prev: number | null = null;
38+
let isValid = true;
39+
40+
function inorder(node: TreeNode | null) {
41+
if (!node || !isValid) return;
42+
43+
inorder(node.left);
44+
45+
if (prev !== null && node.val <= prev) {
46+
isValid = false;
47+
return;
48+
}
49+
prev = node.val;
50+
51+
inorder(node.right);
52+
}
53+
54+
inorder(root);
55+
return isValid;
56+
};

0 commit comments

Comments
 (0)