Skip to content

Commit d1fb9de

Browse files
feat: 98. Validate Binary Search Tree ํ’€์ด
1 parent 2fc53e8 commit d1fb9de

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
์œ ํšจํ•œ BST๋Š” ์ด๋ ‡๊ฒŒ ์ •์˜๊ฐ€ ๋œ๋‹ค.
3+
1. ๋…ธ๋“œ์˜ ์ขŒ์ธก ์„œ๋ธŒ ํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘์€ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋งŒ ์žˆ๋‹ค.
4+
2. ๋…ธ๋“œ์˜ ์šฐ์ธก ์„œ๋ธŒ ํŠธ๋ฆฌ์—๋Š” ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฐ ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋งŒ ์žˆ๋‹ค.
5+
3. ์ขŒ ์šฐ์ธก ์„œ๋ธŒ ํŠธ๋ฆฌ๋„ ๋ชจ๋‘ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—ฌ์•ผ ํ•œ๋‹ค.
6+
7+
ํŠธ๋ฆฌ์˜ ์ˆœํšŒ๋Š” ์žฌ๊ท€๋กœ ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
8+
๋˜ํ•œ BST ์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ, ํ•˜์œ„๊ฐ’, ์ƒํ•œ๊ฐ’์˜ ๊ฐœ๋…์ด ๋“ค์–ด๊ฐ„๋‹ค.
9+
๋งŒ์•ฝ ์ขŒ์ธก์œผ๋กœ ์ˆœํšŒํ•˜๊ฒŒ ๋ ๋•Œ๋Š”
10+
ํ•˜์œ„๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ํ•˜ํ•œ๊ฐ’.
11+
์ƒํ•œ๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋œ๋‹ค.
12+
13+
์šฐ์ธก ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ๋‚ด๋ ค๊ฐˆ ๋•Œ๋Š”,
14+
ํ•˜์œ„๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ’,
15+
์ƒํ•œ๊ฐ’์€ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ์ƒํ•œ๊ฐ’์ด ๋œ๋‹ค.
16+
*/
17+
18+
/**
19+
* Definition for a binary tree node.
20+
* function TreeNode(val, left, right) {
21+
* this.val = (val===undefined ? 0 : val)
22+
* this.left = (left===undefined ? null : left)
23+
* this.right = (right===undefined ? null : right)
24+
* }
25+
*/
26+
/**
27+
* @param {TreeNode} root
28+
* @return {boolean}
29+
*/
30+
var isValidBST = function(root) {
31+
function dfs(node,low,high){
32+
if(!node) return true; // leaf
33+
if(
34+
(low !==null && node.val <= low)||
35+
(high !== null && node.val >= high)){
36+
return false
37+
}
38+
return dfs(node.left,left,node.val) && dfs(node.right,node.val,high)
39+
40+
}
41+
dfs(root,null,null)
42+
};
43+
44+
45+
46+
/*
47+
2. ๋‘๋ฒˆ์งธ๋กœ๋Š” ์ค‘์œ„์ˆœํšŒ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
48+
์ค‘์œ„์ˆœํšŒ : ์™ผ์ชฝ โ†’ ํ˜„์žฌ ๋…ธ๋“œ โ†’ ์˜ค๋ฅธ์ชฝ ์ˆœ์„œ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹
49+
50+
์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค.
51+
์ขŒ์ธกํŠธ๋ฆฌ๋ฅผ ๋จผ์ € ์ˆœํšŒํ•˜๊ณ , ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์šฐ์ธก ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
52+
53+
๋”ฐ๋ผ์„œ, ์ค‘์œ„์ˆœํšŒ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ง„ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด๊ฒƒ์€ ์œ ํšจํ•œ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.
54+
*/
55+
var isValidBST = function(root) {
56+
let prev = null;
57+
58+
function inorder(node) {
59+
if (!node) return true; //leaf
60+
61+
if (!inorder(node.left)) return false;
62+
63+
//์ขŒ์ธก ์ˆœํšŒ
64+
if (prev !== null && node.val <= prev) return false;
65+
prev = node.val;
66+
67+
return inorder(node.right);
68+
}
69+
70+
return inorder(root);
71+
};
72+
// ๋‘˜๋‹ค ์‹œ๊ฐ„๋ณต์žก๋„ O(N)์ด๋‹ค.
73+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(h) (์žฌ๊ท€ ์Šคํƒ๋งŒํผ)
74+

0 commit comments

Comments
ย (0)