首页 > 其他分享 >LeetCode700. 二叉搜索树中的搜索

LeetCode700. 二叉搜索树中的搜索

时间:2024-07-28 20:29:48浏览次数:7  
标签:结点 LeetCode700 val root 二叉 搜索 二叉树 树中

题目链接:https://leetcode.cn/problems/search-in-a-binary-search-tree/description/

题目叙述:

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

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

示例 1:


输入:root = [1,null,2,2]
输出:[2]

示例 2:

输入:root = [0]
输出:[0]

提示:

树中节点的数目在范围 [1, 10^4] 内
-10^5 <= Node.val <= 10^5

思路:

我们首先要知道二叉搜索树是一颗什么树:

二叉搜索树是一个有序树:

若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉搜索树

在了解完二叉搜索树以后,我们就可以开始分析了。

这题是查找一个二叉树中的某一个节点的值等于val,本质上就是在二叉树中查找一个节点,它的值为val(不一定存在),那么我们是肯定要遍历这个二叉树的所有节点,又因为这个二叉树不是

普通的二叉树,是二叉搜索树,是有顺序的二叉树,因此我们直接可以根据这个规律来进行搜索,这题我们可以使用递归法和迭代法两种规则

递归法

递归法我们在前面的文章里面也介绍过了,要注意三步:

  1. 递归函数的参数和返回值:本题我们是查找一个节点的值为val,那么返回值就是TreeNode*,树的结点类型,并且我们要传入一个树的根结点,这就是函数的参数和返回值
  2. 递归结束的条件:当我们的递归搜索到了空结点或者搜索到的这个结点的值就等于val的时候,我们是不是就应该返回了。所以递归结束的条件是if(root==NULL||root->val==val) return root;
  3. 单层递归的逻辑:这题我们单层递归的逻辑很简单,因为二叉搜索树是一颗有序的树,那么我们就直接比对当前结点的值与val的大小,如果root->val<val那么我们应该到二叉树的右子树
    去搜索;否则就去二叉树的左子树进行搜索。

得出代码:

//递归法在二叉搜索树中搜索值
class Solution {
public:
	TreeNode* searchBST(TreeNode* root, int val) {
		if (root == NULL || root->val == val) return root;
		TreeNode* result = NULL;
		//如果当前结点的值大于val,就搜索左边的树
		if (root->val > val) result = searchBST(root->left, val);
		//否则,搜索右边的树
		if (root->val < val) result = searchBST(root->right, val);
		return result;
	}
};

迭代法

迭代法也是可以的,和递归的逻辑差不多,当前结点的值大于val,就到左子树去搜索,否则去右子树搜索

迭代法代码:

class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        while(root!=NULL){
            if(root->val==val) return root;
            else if(root->val>val) root=root->left;
            else if(root->val<val) root=root->right;
        }
        //没搜到就返回空
        return NULL;
    }
};

标签:结点,LeetCode700,val,root,二叉,搜索,二叉树,树中
From: https://www.cnblogs.com/Tomorrowland/p/18328828

相关文章

  • 如何在实际应用中利用B树进行搜索
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • 【无线充电车辆路线和速度预测】使用随机搜索优化方法同时具有路由和速度分配的模型研
    ......
  • 【无线充电车辆路线和速度预测】使用随机搜索优化方法同时具有路由和速度分配的模型研
    ......
  • 二分搜索
    二分搜索2024年7月25日21:27   正常二分思想重点是遇到不同的数怎么定边界,怎么记录答案。特殊情况:没有数字或者只有一个数,直接判断返回先定一个ans=-1用于记录答案,l、r记录左右边界看中点数值,比target小,说明比target的的数字在右边,l=mid+1比target大,ans=mid,还需......
  • 利用Elasticsearch实现地理位置、城市搜索服务
    最近用到一些简单的地理位置查询接口,基于当前定位获取用户所在位置信息(省市区),然后基于该信息查询当前区域的......提供服务。然后就自己研究了下GIS,作为一个程序员。自己能不能实现这个功能呢?答案当然是可以。立即开干。思路:找到数据,写入数据库,利用Elasticsearch强大的搜索能力......
  • 手把手教你集成GraphRag.Net:打造智能图谱搜索系统
        在人工智能和大数据发展的背景下,我们常常需要在项目中实现知识图谱的应用,以便快速、准确地检索和使用信息。        今天,我将向大家详细介绍如何在一个新的.NET项目中集成GraphRag.Net,这是一个参考GraphRag实现的.NET版本,能够实现图谱数据的存储、检索、和问......
  • Java实现一颗二叉搜索树的增删查改操作
    Java实现一颗二叉搜索树的增删查改操作:树节点:packagetest.tree;publicclassTreeNode{privateintval;privateTreeNodeleft;privateTreeNoderight;publicTreeNode(intval){this.val=val;this.left=null;th......
  • 稠密向量+稀疏向量+全文搜索+张量重排=最佳检索RAG?
    RAG中的混合检索如下图:为什么要混合搜索(multi-wayrecall)?越来越多的人认为,仅仅依靠向量搜索,通常是密集向量,可能并不总是产生令人满意的结果。当用户的特定查询关键字与存储的数据不精确匹配时,这种限制就会变得明显。这是因为向量本身不能表示精确的语义信息:向量可以表示一......
  • 算法力扣刷题记录 五十八【701.二叉搜索树中的插入操作】
    前言本文是二叉搜索树操作。二叉树篇继续。一、题目阅读给定二叉搜索树(BST)的根节点root和要插入树中的值value,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只......
  • Chrome 版本 127 需要选择默认搜索引擎
    Chrome更新到版本127后,我的所有Selenium脚本都会引发错误,因为在启动浏览器时我总是必须选择默认搜索引擎。我使用ChromeDriver127.0.6533.72。有人遇到同样的问题吗?是的,Chrome127及其对应的ChromeDriver版本在首次启动时引入了选择默认搜索引擎的提示,这可......