[LC] 98. Validate Binary Search Tree

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

Example 1:

    2
   / 
  1   3

Input: [2,1,3]
Output: true

Example 2:

    5
   / 
  1   4
     / 
    3   6

Input: [5,1,4,null,null,3,6]
Output: false
Explanation: The root node's value is 5 but its right child's value is 4.

Time: O(N)
Space: O(N)

 1 # Definition for a binary tree node.
 2 # class TreeNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution:
 9     def isValidBST(self, root: TreeNode) -> bool:
10         import sys
11         right_bound = sys.maxsize
12         left_bound = -sys.maxsize - 1
13         return self.helper(root, left_bound, right_bound)
14         
15     def helper(self, root, left_bound, right_bound):
16         if root is None:
17             return True
18         if root.val <= left_bound or root.val >= right_bound:
19             return False
20         # 1. left child's child cannot larger than current node val
21         # 2. right child's child cannot be small than current node val
22         return self.helper(root.left, left_bound, root.val) and self.helper(root.right, root.val, right_bound)
23         
24         
25         
26         


 
原文地址:https://www.cnblogs.com/xuanlu/p/11683776.html