I came across this problem online and I found the following function to check if a BST is valid. However, what I don't fully understand is how max/min change from null to values that you can compare against. so in the following function:
//Give the recursive function starting values:
 function checkBST(node) {
  // console.log(node.right);
  return isValidBST(node, null, null);
}
 function isValidBST(node, min, max) {
  console.log(min, max);
  if (node === null) {
    return true;
  }
  if ((max !== null && node.val > max) || (min !== null && node.val < min)) {
    return false;
  }
  if (!isValidBST(node.left, min, node.val) || !isValidBST(node.right, node.val, max)) {
    return false;
  }
  return true;
}
var bst = new BinarySearchTree(8);
bst.insert(3);
bst.insert(1);
bst.insert(6);
bst.insert(10);
bst.insert(4);
when you come back up from the lowest depth on the left it compares the value at the lowest depth with the depth right above it (ie when 1 3 is output). somehow min goes from null to 1 and I'm not seeing how, I was thinking you would need some sort of a base case for the minimum to change from null to something else... I get this in the console when I console.log min/max on each run.
null null
null 8
null 3
null 1
1 3
3 8
3 6
3 4
4 6
6 8
8 null
8 10
10 null
 
     
     
     
     
    