const { arrToBinaryTree } = require('../../utils')
function validateBST(root) {
const recurse = (n, min, max) => {
if (!n) return true
if ((min !== null && n.val <= min) || (max !== null && n.val > max)) {
return false
}
if (!recurse(n.left, min, n.val) || !recurse(n.right, n.val, max)) {
return false
}
return true
}
return recurse(root, null, null)
}
/*
n = number of nodes
Time Complexity - O(n)
Space complexity - O(log n)
*/
// Tests
const testCases = [
[3, 1, 5, 0, 2, 4, 6], //true
[3, 5, 1, 0, 2, 4, 6], //false
[3, 1, 5, 0, 2, null, null, 0], //false
[0, 1, 2, 3, 4], //true
[3, 3, 5, 1, null, 4, 6, 0, 2], //false
]
for (const test of testCases) {
console.log(validateBST(arrToBinaryTree(test))) //true
}