|
| 1 | +// Approach 2 |
| 2 | +// ๐๏ธ 2025-04-11 |
| 3 | +// โณ Time Complexity: O(n) |
| 4 | +// ๐พ Space Complexity: O(h) โ O(log n) for balanced, O(n) for skewed trees |
| 5 | + |
| 6 | +class TreeNode { |
| 7 | + val: number; |
| 8 | + left: TreeNode | null; |
| 9 | + right: TreeNode | null; |
| 10 | + |
| 11 | + constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { |
| 12 | + this.val = val === undefined ? 0 : val; |
| 13 | + this.left = left === undefined ? null : left; |
| 14 | + this.right = right === undefined ? null : right; |
| 15 | + } |
| 16 | +} |
| 17 | + |
| 18 | +function isValidBST(root: TreeNode | null): boolean { |
| 19 | + // ๐ก ์ค์ ์ํ (Inorder Traversal) |
| 20 | + // ๋ฐฉ๋ฌธ ์์: ์ผ์ชฝ ์์ โ ํ์ฌ ๋
ธ๋ โ ์ค๋ฅธ์ชฝ ์์ |
| 21 | + |
| 22 | + let maxVal = -Infinity; |
| 23 | + |
| 24 | + const dfs = (node: TreeNode | null) => { |
| 25 | + if (!node) return true; |
| 26 | + |
| 27 | + if (!dfs(node.left)) return false; |
| 28 | + |
| 29 | + if (node.val <= maxVal) return false; |
| 30 | + |
| 31 | + maxVal = node.val; |
| 32 | + |
| 33 | + if (!dfs(node.right)) return false; |
| 34 | + |
| 35 | + return true; |
| 36 | + }; |
| 37 | + |
| 38 | + return dfs(root); |
| 39 | +} |
| 40 | + |
| 41 | +// Approach 1 |
| 42 | +// ๐๏ธ 2025-04-11 |
| 43 | +// โณ Time Complexity: O(n) |
| 44 | +// ๐พ Space Complexity: O(h) โ O(log n) for balanced, O(n) for skewed trees |
| 45 | + |
| 46 | +// function isValidBST(root: TreeNode | null): boolean { |
| 47 | +// // ์ข์ธก ์๋ธ ํธ๋ฆฌ๋ก ๋ด๋ ค๊ฐ ๋: |
| 48 | +// // ํํ๊ฐ: ๋ถ๋ชจ ๋
ธ๋ ํํ๊ฐ |
| 49 | +// // ์ํ๊ฐ: ๋ถ๋ชจ ๋
ธ๋ ๊ฐ |
| 50 | +// // ์ฐ์ธก ์๋ธ ํธ๋ฆฌ๋ก ๋ด๋ ค๊ฐ ๋: |
| 51 | +// // ์ฐ์ธก ํํ๊ฐ: ๋ถ๋ชจ ๋
ธ๋ ๊ฐ |
| 52 | +// // ์ฐ์ธก ์ํ๊ฐ: ๋ถ๋ชจ ๋
ธ๋์ ์ํ ๊ฐ |
| 53 | +// // ๐ข ์ ์ ์ํ (Preorder Traversal) |
| 54 | +// // ๋ฐฉ๋ฌธ ์์: ํ์ฌ ๋
ธ๋ โ ์ผ์ชฝ ์์ โ ์ค๋ฅธ์ชฝ ์์ |
| 55 | + |
| 56 | +// const dfs = (node: TreeNode | null, low: number, high: number) => { |
| 57 | +// if (!node) return true; |
| 58 | + |
| 59 | +// if (!(node.val > low && node.val < high)) return false; |
| 60 | + |
| 61 | +// return dfs(node.left, low, node.val) && dfs(node.right, node.val, high); |
| 62 | +// }; |
| 63 | + |
| 64 | +// return dfs(root, -Infinity, Infinity); |
| 65 | +// } |
0 commit comments