Leetcode # 98. Validate Binary Search Tree
- 2022.12.08
- ★★ Medium Depth-First Search LeetCode Tree
https://leetcode.com/problems/validate-binary-search-tree/
Solution
Time Complexity: O(len(BST))
Space Complexity: O(len(BST))
(The input and output generally do not count towards the space complexity.)
如下,直接修改 cond 是不可以的,
因為同一個 node 的左右兩子樹都會使用到原始 cond 做合格與否的判斷
while stack:
# condition := (lower_limit, upper_limit)
cur, cond = stack.pop()
if cur.left:
cond[1] = min(cond[1], cur.val)
if cur.left.val <= cond[0] or cur.left.val >= cond[1]:
return False
stack.append([cur.left, cond])
if cur.right:
cond[0] = [max(cond[0], cur.val), cond[1]]
if cur.right.val <= cond[0] or cur.right.val >= cond[1]:
return False
stack.append([cur.right, cond])
![]()
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
stack = [[root, [-float("inf"), float("inf")]]]
while stack:
# condition := (lower_limit, upper_limit)
cur, cond = stack.pop()
if cur.left:
_cond = [cond[0], min(cond[1], cur.val)]
if cur.left.val <= _cond[0] or cur.left.val >= _cond[1]:
return False
stack.append([cur.left, _cond])
if cur.right:
_cond = [max(cond[0], cur.val), cond[1]]
if cur.right.val <= _cond[0] or cur.right.val >= _cond[1]:
return False
stack.append([cur.right, _cond])
return True
Last Updated on 2023/08/16 by A1go