//Recursive
const searchBST = (root, val) => {
if (!root) return null
if (root.val == val) return root
return val < root.val ? searchBST(root.left, val) : searchBST(root.right, val)
}
// Time Complexity - O(N) in worst case and Olog(N) in average case
// Space Complexity - O(N) in worst case and Olog(N) in average case (to keep track of the recursion stack)
// Iterative
const searchBSTIterative = (root, val) => {
while (root) {
if (root.val == val) return root
root = val < root.val ? root.left : root.right
}
return null
}
// Time Complexity - O(N) in worst case and Olog(N) in average case
// Space Complexity - O(1) (constant)
var node3 = {
val: 2,
right: { val: 3, right: null, left: null },
left: { val: 1, right: null, left: { val: -1, right: null, left: null } },
}
//Test cases
console.log(searchBST(node3, -1))
console.log(searchBSTIterative(node3, 12))