给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
示例 1:
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]
Example 2:
输入:root = [4,2,7,1,3], val = 5
输出:[]
# 递归思路
递归实现非常简单:
如果根节点为空 root == null 或者 根节点的值等于搜索值 val == root.val,返回根节点。
如果 val < root.val,进入根节点的 左子树查找 searchBST(root.left, val)。
如果 val > root.val,进入根节点的 右子树查找 searchBST(root.right, val)。
返回根节点。
class Solution:
def searchBST(self, root: TreeNode, val: int) -> TreeNode:
# 方法一 递归
if root is None or val == root.val:
return root
if val < root.val:
return self.searchBST(root.left, val)
else:
return self.searchBST(root.right, val)
# 方法二 迭代思路
为了降低空间复杂度,将递归转换为迭代:
如果根节点不空 root != null 且根节 点不是目的节点 val != root.val:
如果 val < root.val,进入根节点的左 子树查找 root = root.left。
如果 val > root.val,进入根节点的右 子树查找 root = root.right。
返回 root
# 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: TreeNode, val: int) -> TreeNode:
# # 方法一 递归
# if root is None or val == root.val:
# return root
# if val < root.val:
# return self.searchBST(root.left, val)
# else:
# return self.searchBST(root.right, val)
# 方法二 迭代
while root is not None and root.val != val:
if root.val < val:
root = root.right
else:
root = root.left
return root