Difficulty:: Medium
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:
| 12
 3
 4
 5
 
 | Input:2
 / \
 1   3
 Output: true
 
 | 
Example 2:
| 12
 3
 4
 5
 6
 7
 8
 
 |     5/ \
 1   4
 / \
 3   6
 Output: false
 Explanation: The input is: [5,1,4,null,null,3,6]. The root node's value
 is 5 but its right child's value is 4.
 
 | 
Solution
Language: Java
递归法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | 
 
 
 
 
 
 
 
 class Solution {
 public boolean isValidBST(TreeNode root) {
 if (root == null) {
 return true;
 }
 return validHelper(root, Long.MIN_VALUE, Long.MAX_VALUE);
 }
 
 private boolean validHelper(TreeNode root, long minVal, long maxVal) {
 if (root == null) {
 return true;
 }
 if (root.val >= maxVal || root.val <= minVal) {
 return false;
 }
 return validHelper(root.left, minVal, root.val) && validHelper(root.right, root.val, maxVal);
 }
 }
 
 | 
中序遍历法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | 
 
 
 
 
 
 
 
 class Solution {
 public boolean isValidBST(TreeNode root) {
 if (root == null) {
 return true;
 }
 Deque<TreeNode> dq = new ArrayDeque<>();
 long prev = Long.MIN_VALUE;
 TreeNode cur = root;
 while (!dq.isEmpty() || cur != null) {
 if (cur != null) {
 dq.push(cur);
 cur = cur.left;
 } else {
 cur = dq.pop();
 if (cur.val <= prev) {
 return false;
 }
 prev = cur.val;
 cur = cur.right;
 }
 }
 return true;
 }
 }
 
 |