Javascript - 3 solutions
Recursion with helper function:\n\nvar searchBST = function(root, val) {\n    let res = null;\n    const helper = (node) => {\n        if(!node) return;\n      
**Recursion with helper function:**\n```\nvar searchBST = function(root, val) {\n    let res = null;\n    const helper = (node) => {\n        if(!node) return;\n        if(node.val === val){\n            res = node;\n            return;\n        }\n        if(val < node.val) helper(node.left)\n        if(val > node.val) helper(node.right)\n    }\n    \n    helper(root);   \n    return res;\n};\n```\n\n**Pure Recursion :**\n```\nvar searchBST = function(root, val) {\n    if(!root) return null;\n    if(root.val === val) return root;\n    if(val < root.val) return searchBST(root.left, val);\n    if(val > root.val) return searchBST(root.right, val);\n}\n```\n\n**Iterative:**\n```\n// no need to use stack since "val"  or "null" will be eventually found in the end \n// and we do not need to traverse what we skipped\n\nvar searchBST = function(root, val) {\n    while(root !== null && root.val !== val){\n        root = val < root.val ? root.left : root.right;\n    }\n    return root;\n}\n```
['Recursion', 'Iterator', 'JavaScript']