题目

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

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

示例 1:

img

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

示例 2:

img

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

提示:

  • 数中节点数在 [1, 5000] 范围内
  • 1 <= Node.val <= 107
  • root 是二叉搜索树
  • 1 <= val <= 107

解答

  • 直接搜索

在二叉搜索树中,每个节点的值大于其左子树中的所有节点的值,小于其右子树中的所有节点的值,因此可以利用这个性质进行查找操作。你的方法通过迭代方式在二叉搜索树中查找给定值,并返回匹配的节点指针。这种查找方式通常称为”二叉搜索树的查找”或”BST查找”。

/**
 * 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) {
        while (root != nullptr) { // 在root非空的情况下进行循环
            if (val == root->val) {
                return root; // 如果值匹配就直接返回root
            }
            else if (val > root->val) {
                root = root->right; // 如果值大于root现有的值,它的目标节点只有可能在他的右子树
            }
            else {
                root = root->left; // 如果值小于root现有的值,它的目标节点只有可能在他的左子树
            }
        }
        return nullptr; // 如果root为空(不管是现有的root还是迭代后的root) 就直接返回nullptr
    }
};