LeetCode 700. 二叉搜索树的搜索(Search in a Binary Search Tree)

问题理解

在二叉搜索树(BST)中查找值为 val 的节点,若存在则返回以其为根的子树,否则返回 null。关键性质:BST 中左子树所有节点值 < 根节点值 < 右子树所有节点值,可实现高效定向搜索。

思路

利用 BST 的有序性进行定向搜索

  • 若当前节点为空 → 未找到,返回 nullptr
  • 若当前节点值等于 val → 找到,返回该节点
  • 若 val 小于当前节点值 → 搜索左子树
  • 若 val 大于当前节点值 → 搜索右子树

可用递归迭代实现,两者时间复杂度均为 O(log n)(平衡时),最坏 O(n)(退化为链表)。

trick

  • 避免空指针解引用:访问 ptr->val 前必须确保 ptr != nullptr
  • 循环条件设计:使用 while (ptr && ptr->val != val) 利用短路求值防止崩溃
  • 返回的是目标节点本身,不是原根节点 root
  • 递归写法简洁安全,迭代写法节省栈空间
  • 不要用多个独立 if:应使用 if-else if-else 或直接 else,避免逻辑重叠导致空指针错误

Code

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        TreeNode* ptr;
        ptr = root;
        while(ptr->val != val)
        {
            if (ptr->val > val) ptr = ptr->left;
            else if (ptr->val < val) ptr = ptr-> right;
            if (ptr == nullptr) return nullptr;
        }
        return ptr;
    }
};
posted @ 2026-01-20 17:30  West11  阅读(1)  评论(0)    收藏  举报