Skip to content

Commit daed312

Browse files
committed
solution Validate Binary Search Tree (#251)
#251
1 parent 1084057 commit daed312

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*
14+
* ๋ฌธ์ œ๊ฐ€ ๋„ˆ๋ฌด ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ.. ์ฒ˜์Œ๋ณด๋Š” ๊ฐœ๋… ๋„ˆ๋ฌด ์–ด๋ ค์›€
15+
*
16+
* ์šฐ์„  ์ด์ง„ํŠธ๋ฆฌ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ ์œ„ํ•ด์„œ https://www.youtube.com/watch?v=i57ZGhOVPcI ์„ ์‚ดํŽด๋ณด์•˜์Œ
17+
*
18+
* ํ’€์ด 1
19+
*
20+
* ์žฌ๊ท€์  ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ (๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ๋ฏธ์„ธํ•˜๊ฒŒ ์ข‹์Œ) => ์ด ๋ฐฉ๋ฒ•์ด ์ด์ง„ํŠธ๋ฆฌ ๊ฐœ๋…์— ์กฐ๊ธˆ ๋” ์ง๊ด€์ ์ž„
21+
*
22+
* function isValidBST(root: TreeNode | null): boolean {
23+
* function validate(node: TreeNode | null, min: number | null, max: number | null): boolean {
24+
* if (node === null) return true;
25+
*
26+
* if ((min !== null && node.val <= min) || (max !== null && node.val >= max)) {
27+
* return false;
28+
* }
29+
*
30+
* return validate(node.left, min, node.val) && validate(node.right, node.val, max);
31+
* }
32+
*
33+
* return validate(root, null, null);
34+
* }
35+
*
36+
* ํ’€์ด 2
37+
*
38+
* ์ค‘์œ„ ์ˆœํšŒ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•ด๋ณด๊ธฐ => ์ฝ”๋“œ๋Š” ์ด ๋ฐฉ๋ฒ•์ด ๋” ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์ข‹์Œ
39+
*/
40+
41+
function isValidBST(root: TreeNode | null): boolean {
42+
let prev: number | null = null;
43+
44+
// ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค
45+
function inorder(node: TreeNode | null): boolean {
46+
if (node === null) return true;
47+
48+
// ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฒ€์‚ฌ
49+
if (!inorder(node.left)) return false;
50+
51+
// ํ˜„์žฌ ๋…ธ๋“œ ๊ฒ€์‚ฌ (์ค‘์œ„ ์ˆœํšŒ์—์„œ ํ˜„์žฌ ๊ฐ’์€ ์ด์ „ ๊ฐ’๋ณด๋‹ค ์ปค์•ผ ํ•จ)
52+
if (prev !== null && node.val <= prev) {
53+
return false;
54+
}
55+
prev = node.val;
56+
57+
// ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฒ€์‚ฌ
58+
return inorder(node.right);
59+
}
60+
61+
return inorder(root);
62+
}

0 commit comments

Comments
ย (0)