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;
}
};

浙公网安备 33010602011771号