LeetCode 700. 二叉搜索树中的搜索

news2024/9/17 8:28:31

LeetCode 700. 二叉搜索树中的搜索

难度: e a s y \color{Green}{easy} easy
难度: m i d d l e \color{orange}{middle} middle
难度: h a r d \color{red}{hard} hard


题目描述

给定二叉搜索树(BST)的根节点 r o o t root root 和一个整数值 v a l val val

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

示例 1:

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

示例 2:

[外链图片转存中…(img-QAZGWobk-1677565545106)]

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

提示:

  • 数中节点数在 [ 1 , 5000 ] [1, 5000] [1,5000] 范围内
  • 1 < = N o d e . v a l < = 1 0 7 1 <= Node.val <= 10^{7} 1<=Node.val<=107
  • r o o t root root 是二叉搜索树
  • 1 < = v a l < = 1 0 7 1 <= val <= 10^{7} 1<=val<=107

算法1

(递归)

二叉搜索树满足如下性质:

  • 左子树所有节点的元素值均小于根的元素值;
  • 右子树所有节点的元素值均大于根的元素值。

据此可以得到如下算法:

  • 若 root 为空则返回空节点;
  • 若 val=root.val,则返回 root;
  • 若 val<root.val,递归左子树;
  • 若 val>root.val,递归右子树。

复杂度分析

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n 是二叉搜索树的节点数。

  • 空间复杂度 : O ( n ) O(n) O(n)

C++ 代码

/**
 * 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) {
        if (!root) return NULL;
        if (root->val == val) return root;
        if (root->val > val) return searchBST(root->left, val);
        else return searchBST(root->right, val);
    }
};

算法2

(迭代)

二叉搜索树满足如下性质:

  • 左子树所有节点的元素值均小于根的元素值;
  • 右子树所有节点的元素值均大于根的元素值。

据此可以得到如下算法:

  • 若 root 为空则跳出循环,并返回空节点;
  • 若 val=root.val,则返回 root;
  • 若 val<root.val,将 root 置为 root.left;
  • 若 val>root.val,将 root 置为 root.right。

复杂度分析

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n 是二叉搜索树的节点数。

  • 空间复杂度 : O ( 1 ) O(1) O(1)

C++ 代码

/**
 * 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) {
            if (root->val == val) return root;
            else if (root->val > val) root = root->left;
            else root = root->right;
        }

        return nullptr;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go defer用法

defer概览 defer是go语言里的一个关键字,在 函数内部使用;defer关键字后面跟一个 函数或匿名函数; defer用法 执行一些资源的收尾工作,如 关闭数据库连接,关闭文件描述符,释放资源等等;结合recover()函数使用,防止函数内部的异常导致整个程序停止;defer在遇到panic后,仍然会…

Javascript的API基本内容(六)

一、正则表达式 1.定义规则 const reg /表达式/ 其中/ /是正则表达式字面量正则表达式也是对象 2.使用正则 test()方法 用来查看正则表达式与指定的字符串是否匹配如果正则表达式与指定的字符串匹配 &#xff0c;返回true&#xff0c;否则false 3.元字符 比如&#xff0…

论文阅读:Self-Supervised Monocular Depth Estimation with Internal Feature Fusion

中文标题&#xff1a;基于内部特征融合的自监督单目深度估计 创新点 参照HR-Net在网络上下采样的过程中充分利用语义信息。设计了一个注意力模块处理跳接。提出了一个扩展的评估策略&#xff0c;其中方法可以使用基准数据中的困难的情况进行进一步测试&#xff0c;以一种自我…

【 PMU】信号生成、采样、分割、估计器应用和误差计算(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

Active Directory管理帮助台

随着组织规模扩大&#xff0c;需要大幅增加Active Directory帮助台指派。随着组织开始在新地点开设办事处&#xff0c;管理员管理所有地点的用户变得极为繁琐。在这样的情况下&#xff0c;帮助台指派需要横跨不同的域以方便多域管理。尝试使用本机AD工具或PowerShell执行帮助台…

HyperLPR3-五分钟搞定: 中文车牌识别光速部署与使用

简介HyperLPR在2023年初已经更新到了v3的版本&#xff0c;该版本与先前的版本一样都是用于识别中文车牌的开源图像算法项目&#xff0c;最新的版本的源码可从github中提取&#xff1a;https://github.com/szad670401/HyperLPR快速安装使用Python平台可以直接使用pip进行安装&am…

(五十二)大白话不断在表中插入数据时,物理存储是如何进行页分裂的?.md

上回我们讲到了数据页的物理存储结构&#xff0c;数据页之间是组成双向链表的&#xff0c;数据页内部的数据行是组成单向链表的&#xff0c;每个数据页内根据主键做了一个页目录 然后一般来说&#xff0c;你没有索引的情况下&#xff0c;所有的数据查询&#xff0c;其实在物理…

Java Map集合体系(HashMap、LinkedHashMap、TreeMap、集合嵌套)

目录Map集合体系一、Map集合的概述二、Map集合体系特点三、Map集合常用API四、Map集合的遍历4.1 Map集合的遍历方式一&#xff1a;键找值4.2 Map集合的遍历方式二&#xff1a;键值对4.3 Map集合的遍历方式三&#xff1a;lambda表达式五、Map集合案例-统计投票人数六、Map集合的…

Vue2.0开发之——ref引用实例-文本框和按钮的按需展示(42)

一 概述 文本框和按钮按需展示功能实现了解this.$nextTick的应用场景updated为啥不行 二 文本框和按钮按需展示功能实现 2.1 布局文件 <template><div class"app-container"><input type"text" v-if"inputVisible" blur"…

ffmpeg多路同时推流

一、ffmpeg常见使用方法1.1利用FFMPEG命令进行文件分割1.2转换格式1.3推流配置方法一&#xff1a;ngnix&#xff08;不推荐&#xff0c;推流不好使&#xff09;方法二&#xff1a;srs&#xff08;强烈推荐&#xff09;1.4查看nginx启动是否成功二、ffmpeg推流——>ngnix单路…

Shell高级——Linux中的文件描述符(本质是数组的下标)

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 前言 Linux中一切接文件&#xff0c;比如 C 源文件、视频文件、Shell脚本、可执行文件等&#xff0c;就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上…

【项目管理PMP备考】PMP到底学习什么?

学习PMP的过程其实就是了解这样一种先进的管理思想、理念、方法&#xff0c;也就是学习新文化。PMP考试就是考核你对PMP管理规则、流程、方法的掌握程度&#xff0c;因此他要考察的内容一定是项目管理的要素&#xff0c;而且也一定是偏向与考核你对这种新文化的理解程度。我们如…

基于OMAPL138+FPGA核心板多核软件开发组件MCSDK开发入门(下)

本文测试板卡为创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 FPGA 处理器设计的工业级核心板。核心板内部OMAP-L138 与 Logos/Spartan-6 通过 uPP、EMIFA、I2C 通信总线连接,并通过工业级 B2B连接器引…

图观 | ChatGTP是如何通过知识图谱回答问题的?

文/Emma Z1950年&#xff0c;图灵发表了具有里程碑意义的论文《计算机器与智能》&#xff08;Computing Machinery and Intelligence&#xff09;&#xff0c;提出了一个关于机器人的著名判断原则——图灵测试&#xff0c;也被称为图灵判断&#xff0c;它指出如果第三者无法辨别…

Nacos的安装指南

1.Windows安装开发阶段采用单机安装即可。1.1.下载安装包在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a;GitHub主页&#xff1a;https://github.com/alibaba/nacosGitHub的Release下载页&#xff1a;https://gi…

JAVA线程池原理详解一

JAVA线程池原理详解一 一. 线程池的优点 线程是稀缺资源&#xff0c;使用线程池可以减少创建和销毁线程的次数&#xff0c;每个工作线程都可以重复使用。可以根据系统的承受能力&#xff0c;调整线程池中工作线程的数量&#xff0c;防止因为消耗过多内存导致服务器崩溃。 二…

Mysql索引优化解决方案

一、索引介绍 1、什么是索引 索引就是帮助mysql高效获取数据的数据结构 mysql 除了存储数据&#xff0c;还有数据结构&#xff0c;我们可以通过数据结构的查找算法快速找到数据&#xff0c;这种数据结构就是索引。类似于 字典中的目录&#xff0c;帮助我们快速查找数据。 2、…

Netty核心组件EventLoop源码解析

源码解析目标 分析最核心组件EventLoop在Netty运行过程中所参与的事情&#xff0c;以及具体实现 源码解析 依然用netty包example下Echo目录下的案例代码&#xff0c;单我们写一个NettyServer时候&#xff0c;第一句话就是 EventLoopGroup bossGroup new NioEventLoopGroup(…

html2canvas将页面dom元素内容渲染成图片保存至本地

html2canvas:https://html2canvas.hertzen.com/configuration/ github:https://github.com/niklasvh/html2canvas 效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compa…

VR直播丨颠覆性技术革命,新型直播已经到来

细数当下最火热的营销手段&#xff0c;首先浮现脑海的无疑是“直播”。前有罗永浩、李佳琦&#xff0c;后有刘畊宏和东方甄选&#xff0c;直播如日中天&#xff0c;俨然成了大众足不出户就能休闲娱乐的重要途径。 而随着虚拟现实在“十四五规划”中被列入“建设数字中国”数字…