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:

  1. 2
  2. / \
  3. 1 3

Binary tree [2,1,3], return true.

Example 2:

  1. 1
  2. / \
  3. 2 3

Binary tree [1,2,3], return false.

Solution:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. public class Solution {
  11. public boolean isValidBST(TreeNode root) {
  12. return isValidBST(root, null, null);
  13. }
  14. boolean isValidBST(TreeNode root, Integer min, Integer max) {
  15. if (root == null)
  16. return true;
  17. if (min != null && root.val <= min)
  18. return false;
  19. if (max != null && root.val >= max)
  20. return false;
  21. return isValidBST(root.left, min, root.val) && isValidBST(root.right, root.val, max);
  22. }
  23. }