#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
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:
/*
二叉搜索树是一个有序树,特点如下:
(1).若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
(2).若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3).它的左、右子树也分别为二叉搜索树
*/
// 递归法:因为要检索二叉树的单条边,因此递归函数需要有返回值!
// 1.确定函数入参及返回值
TreeNode *searchBST(TreeNode *root, int val)
{
// 2.确定递归终止条件:如果给定的二叉搜索树为空或找到给定的值,则返回root
if (root == nullptr || root->val == val)
return root;
// 3.确定单层递归逻辑:给定值比根节点小,则在左子树中搜索给定值;反之,则在右子树中搜索给定值;
if (root->val > val)
return searchBST(root->left, val);
if (root->val < val)
return searchBST(root->right, val);
return nullptr;
}
};
// 迭代法:一般是使用栈来模拟深度遍历或者使用队列来模拟广度遍历,但是二叉搜索树的节点是有序性的,它确定了搜索的方向,可以不使用辅助栈或者队列
class Solution
{
public:
TreeNode *searchBST(TreeNode *root, int val)
{
while (root != nullptr)
{
if (root->val > val)
root = root->left;
else if (root->val < val)
root = root->right;
else
return root;
}
return nullptr;
}
};
【LeetCode-700 | 二叉搜索树中的搜索】
原创CurryCoder 博主文章分类:LeetCode刷题记录 ©著作权
©著作权归作者所有:来自51CTO博客作者CurryCoder的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【LeetCode 700】二叉搜索树中的搜索
题目描述给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。
leetcode 算法 二叉树 js JavaScript -
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索文章目录【LeetCode 39】700.二叉搜索树中的搜索一、题意二、解答过程一、题意二、
leetcode 算法 深度优先 二叉搜索树 搜索 -
700. 二叉搜索树中的搜索 : 二叉树的搜索
题目描述 这是 LeetCode 上的 700. 二叉搜索树中的搜索 ,难度为 简单。 Tag : 「树的搜索」、
后端 LeetCode 搜索 递归 迭代