题目
给定二叉搜索树(BST)的根节点 root
和一个整数值 val
。
你需要在 BST 中找到节点值等于 val
的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null
。
示例 1:
输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]
示例 2:
输入: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
}
};