|
| 1 | +""" |
| 2 | +Constraints: |
| 3 | +- The number of nodes in the tree is in the range [1, 10^4]. |
| 4 | +- -2^31 <= Node.val <= 2^31 - 1 |
| 5 | +
|
| 6 | +Time Complexity: O(n) |
| 7 | +- ํธ๋ฆฌ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํจ |
| 8 | +
|
| 9 | +Space Complexity: O(h) |
| 10 | +- ์ฌ๊ท ํธ์ถ ์คํ์ ์ต๋ ๊น์ด๋ ํธ๋ฆฌ์ ๋์ด |
| 11 | +
|
| 12 | +ํ์ด๋ฐฉ๋ฒ: |
| 13 | +1. ๊ฐ ๋
ธ๋๊ฐ ๊ฐ์ง ์ ์๋ ๊ฐ์ ๋ฒ์๋ฅผ ํ์ ํจ |
| 14 | + - root ๋
ธ๋์ ๋ฒ์๋ (-๋ฌดํ๋, +๋ฌดํ๋)๋ก ์ค์ |
| 15 | +2. Base case: |
| 16 | + - ๋น ๋
ธ๋์ ๊ฒฝ์ฐ True |
| 17 | + - ๋
ธ๋ ๊ฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด False |
| 18 | +3. ์ฌ๊ท๋ฅผ ํ์ฉ: |
| 19 | + - ์ผ์ชฝ ์๋ธํธ๋ฆฌ: max_val๋ฅผ ํ์ฌ ๋
ธ๋ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ (๋ชจ๋ ํ์ฌ ๊ฐ๋ณด๋ค ์์์ผ ํจ) |
| 20 | + - ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ: min_val์ ํ์ฌ ๋
ธ๋ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ (๋ชจ๋ ํ์ฌ ๊ฐ๋ณด๋ค ์ปค์ผ ํจ) |
| 21 | + - ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด BST |
| 22 | +""" |
| 23 | +# Definition for a binary tree node. |
| 24 | +# class TreeNode: |
| 25 | +# def __init__(self, val=0, left=None, right=None): |
| 26 | +# self.val = val |
| 27 | +# self.left = left |
| 28 | +# self.right = right |
| 29 | +class Solution: |
| 30 | + def isValidBST(self, root: Optional[TreeNode]) -> bool: |
| 31 | + def validate(node, min_val, max_val): |
| 32 | + if not node: |
| 33 | + return True |
| 34 | + |
| 35 | + if not (min_val < node.val < max_val): |
| 36 | + return False |
| 37 | + |
| 38 | + return (validate(node.left, min_val, node.val) and |
| 39 | + validate(node.right, node.val, max_val)) |
| 40 | + |
| 41 | + return validate(root, float("-inf"), float("inf")) |
| 42 | + |
0 commit comments