|
| 1 | +""" |
| 2 | +λͺ¨λ μΌμͺ½ μλΈνΈλ¦¬λ νμ¬ λ
Έλλ³΄λ€ μμμΌ νκ³ , |
| 3 | +λͺ¨λ μ€λ₯Έμͺ½ μλΈνΈλ¦¬λ νμ¬ λ
Έλλ³΄λ€ μ»€μΌ νλ€. |
| 4 | +
|
| 5 | +μ΄κ±Έ μν΄μ λ²μ(min/max)λ₯Ό μ¬κ·λ‘ λ΄λ €λ³΄λ΄μΌ νλ€. |
| 6 | +
|
| 7 | +TC: O(n), λͺ¨λ λ
Έλ 1λ²μ© νμ |
| 8 | +SC: O(h), μ¬κ· νΈμΆ μ€ν, hλ νΈλ¦¬ λμ΄ |
| 9 | +""" |
| 10 | + |
| 11 | +from typing import Optional |
| 12 | +# Definition for a binary tree node. |
| 13 | +class TreeNode: |
| 14 | + def __init__(self, val=0, left=None, right=None): |
| 15 | + self.val = val |
| 16 | + self.left = left |
| 17 | + self.right = right |
| 18 | + |
| 19 | +class Solution: |
| 20 | + def isValidBST(self, root: Optional[TreeNode]) -> bool: |
| 21 | + def validate(node, low, high): |
| 22 | + if not node: |
| 23 | + return True # λΉμ΄μλ λ
Έλλ BST |
| 24 | + # νμ¬ λ
Έλκ° λ²μ λ°μ΄λ©΄ BST 쑰건 μλ°° |
| 25 | + if not (low < node.val < high): |
| 26 | + return False |
| 27 | + # μΌμͺ½μ μ΅λκ°μ νμ¬ λ
Έλλ³΄λ€ μκ² μ ν |
| 28 | + # μ€λ₯Έμͺ½μ μ΅μκ°μ νμ¬ λ
Έλλ³΄λ€ ν¬κ² μ ν |
| 29 | + return (validate(node.left, low, node.val) and |
| 30 | + validate(node.right, node.val, high)) |
| 31 | + |
| 32 | + return validate(root, float('-inf'), float('inf')) |
| 33 | + |
| 34 | + |
| 35 | +""" |
| 36 | +μ€ν νμ΄ |
| 37 | +
|
| 38 | +- BSTμμ μ€μ μννλ©΄ νμ μ€λ¦μ°¨μμ΄μ΄μΌ νλ€λ μ±μ§μ μ΄μ©ν λ°©λ² |
| 39 | +- μ€μ μν: μΌμͺ½ β νμ¬ λ
Έλ β μ€λ₯Έμͺ½ |
| 40 | +- BSTλ μ€μ μν μ κ°μ΄ νμ μ¦κ°ν΄μΌ νλ―λ‘, (μ€λ¦μ°¨μ) |
| 41 | + μ΄μ λ
Έλ(prev)λ³΄λ€ νμ¬ λ
Έλ κ°μ΄ μκ±°λ κ°μΌλ©΄ μλͺ»λ BST |
| 42 | +
|
| 43 | +TC: O(n), λͺ¨λ λ
Έλ 1λ²μ© νμ |
| 44 | +SC: O(h), μ΅λ μ€ν κΉμ΄ = νΈλ¦¬ λμ΄ |
| 45 | +""" |
| 46 | + |
| 47 | +class Solution: |
| 48 | + def isValidBST(self, root: Optional[TreeNode]) -> bool: |
| 49 | + stack = [] |
| 50 | + prev = None # μ΄μ μ€μ μν κ° |
| 51 | + |
| 52 | + while stack or root: |
| 53 | + # μΌμͺ½ λκΉμ§ νμ |
| 54 | + while root: |
| 55 | + stack.append(root) |
| 56 | + root = root.left |
| 57 | + |
| 58 | + root = stack.pop() |
| 59 | + |
| 60 | + # μ΄μ κ°λ³΄λ€ μκ±°λ κ°μΌλ©΄ BST μλ° |
| 61 | + if prev is not None and root.val <= prev: |
| 62 | + return False |
| 63 | + prev = root.val |
| 64 | + |
| 65 | + # μ€λ₯Έμͺ½μΌλ‘ μ΄λ |
| 66 | + root = root.right |
| 67 | + |
| 68 | + return True |
| 69 | + |
| 70 | + |
1 | 71 | # O(n) time, O(n) space
|
2 | 72 |
|
3 | 73 | # Definition for a binary tree node.
|
|
0 commit comments