https://leetcode-cn.com/problems/search-in-a-binary-search-tree/
题目
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和值:2
你应该返回如下子树:
2
/ \
1 3
在上述示例中,如果要找的值是5,但因为没有节点值为5,我们应该返回NULL。
思路1
二叉搜索树的基础题。二叉搜索树的性质是,左子树的值小于根节点小于右子树的值,据此可以写出递归代码如下:
TreeNode *searchBST(TreeNode *root, int val) {
if (root == nullptr) {
return nullptr;
}
if (val == root->val) {
return root;
}else if (val < root->val) {
return searchBST(root->left, val);
}else{
return searchBST(root->right, val);
}
}
思路2
也可以改成迭代的思路来做:
TreeNode *searchBST(TreeNode *root, int val) {
while (root) {
if (val == root->val) {
return root;
}else if(val > root->val) {
root = root->right;
}else{
root = root->left;
}
}
return nullptr;
}
迭代的核心思想在于不断地去更新root自身。