700-search-in-a-binary-search-tree¶
Try it on leetcode
Description¶
You are given the root
of a binary search tree (BST) and an integer val
.
Find the node in the BST that the node's value equals val
and return the subtree rooted with that node. If such a node does not exist, return null
.
Example 1:

Input: root = [4,2,7,1,3], val = 2 Output: [2,1,3]
Example 2:

Input: root = [4,2,7,1,3], val = 5 Output: []
Constraints:
- The number of nodes in the tree is in the range
[1, 5000]
. 1 <= Node.val <= 107
root
is a binary search tree.1 <= val <= 107
Solution(Python)¶
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
return self.iterative(root, val)
# Time Complexity: O(log n)
# Space Complexity: O(log n)
def recursive(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
if root is None:
return None
if root.val == val:
return root
elif root.val > val:
return self.searchBST(root.left, val)
elif root.val < val:
return self.searchBST(root.right, val)
# Time Complexity: O(log n)
# Space Complexity: O(1)
def iterative(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
cur = root
while cur is not None:
if cur.val == val:
return cur
elif cur.val > val:
cur = cur.left
else:
cur = cur.right
return cur