Python Solution (iterative, O(1) space, O(n-log-n) average case time, O(n) worst case time)
All pretty straightforward, if you\'re having trouble with this I\'d recommend going back and re-reading the definition of a binary search tree. The only nodes 
All pretty straightforward, if you\'re having trouble with this I\'d recommend going back and re-reading the definition of a binary search tree. The only nodes you should be touching at all are ones that are along the path to the node we\'re searching for, or that would be if it existed.\n\nIt\'s best to use iteration rather than recursion here, because iteration is O(1) space, whereas recursion is O(log-n) on average with a worst case of O(n) space due to Python not supporting tail calls (meaning that everything goes on the stack, and that could be a lot for a stringy tree).\n\nRegardless of whether we use iteration or recursion, the time taken has a best case of O(1), if the node we\'re looking for was the root node, an average case of O(n-log-n) for a reasonably balanced tree, and a worst case of O(n) when the tree is long and stringy.\n\nDon\'t forget to make sure the root node actually exists, and also be careful that your code handles the case of ONLY having a root node.\n\n```\nclass Solution(object):\n    def searchBST(self, root, val):\n        """\n        :type root: TreeNode\n        :type val: int\n        :rtype: TreeNode\n        """\n        current_node = root\n        while current_node != None:\n            if current_node.val == val:\n                return current_node\n            elif current_node.val < val:\n                current_node = current_node.right\n            else:\n                current_node = current_node.left\n        return None\n```
[]