https://leetcode.cn/problems/search-in-a-binary-search-tree/
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
示例 1:
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]
class Solution:
def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
# 星级:☆☆☆
# 由于本题中root至少有1个节点,因为if not root的情况无需考虑
# 方法1:迭代、二叉搜索树特性
# while root:
# if root.val == val:
# return root
# elif val < root.val:
# root = root.left
# else:
# root = root.right
# 方法2:递归、前序遍历、二叉搜索树特性
# if not root: # base case,遍历到头了也没找到,返回空节点
# return
# elif root.val == val: # 找到了返回,该节点的为根的子树
# return root
# elif val < root.val: # 向左子树递归,参数中有root.left,所以可以不用设定变量承接
# return self.searchBST(root.left, val)
# else: # 向右子树递归,参数中有root.right,所以可以不用设定变量承接
# return self.searchBST(root.right, val)
# 方法3:递归、前序遍历
if not root:
return
if root.val == val:
return root
# 当前节点没找到就递归地去左右子树寻找
# 找个变量承接
left = self.searchBST(root.left, val)
right = self.searchBST(root.right, val)
return left if left else right