Skip to content

700. 二叉搜索树中的搜索 Easy

给定二叉搜索树(BST)的根节点 root 和一个整数值 val

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null

示例 1:
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]

700-1

示例 2:
输入:root = [4,2,7,1,3], val = 5
输出:[]

700-2

解题思路

输入:二叉搜索树的根节点 root,一个整数 val

输出:找到值为 val 的节点并返回。

这道题是一个 二叉搜索树遍历 问题。

根据二叉搜索树的特点,当发现值比节点值小则说明在左子树,直接返回左子树遍历结果

当发现值比节点值大则说明在右子树,直接返回右子树遍历结果

直到找到值相等的节点为止,如果找到空结点还没找到,则说明不存在直接返回空节点

代码实现

python
class Solution:
    def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
        # 在二叉搜索树中查找值为 val 的节点,返回该节点为根的子树
        def dfs(node, val):
            if not node:
                return None  # 空节点,说明没找到

            if val < node.val:
                # 要找的值比当前节点小,去左子树查找
                return dfs(node.left, val)
            elif val > node.val:
                # 要找的值比当前节点大,去右子树查找
                return dfs(node.right, val)
            else:
                # 找到了值等于 val 的节点
                return node

        return dfs(root, val)
javascript
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
    function dfs(node, val) {
        if (!node) return node;

        if (val < node.val) 
            return dfs(node.left, val);
        
        if (val > node.val)
            return dfs(node.right, val)
        
        return node;
    }

    return dfs(root, val);
};

复杂度分析

时间复杂度:O(n)

空间复杂度:O(h)

链接

700 国际版

700 中文版