【二叉搜索树】【递归】【迭代】Leetcode 700. 二叉搜索树中的搜索

【二叉搜索树】【递归】【迭代】Leetcode 700. 二叉搜索树中的搜索

    • 二叉搜索树
    • 解法1 递归法
    • 解法2 迭代法

---------------🎈🎈题目链接🎈🎈-------------------
在这里插入图片描述

二叉搜索树

二叉搜索树
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树,具有以下性质:

有序性: 对于二叉搜索树中的每个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。这意味着对于任何节点,其左子树中的值都小于该节点的值,右子树中的值都大于该节点的值。

唯一性: 二叉搜索树中不存在重复的节点。

搜索操作: 由于二叉搜索树的有序性,可以利用二分查找的思想进行快速的搜索。给定一个值,可以从根节点开始比较,根据比较结果决定是向左子树还是向右子树搜索,直到找到目标节点或者搜索到叶子节点为止。

插入操作: 插入操作也是根据节点值的大小关系进行的。从根节点开始,比较要插入的节点值与当前节点值的大小关系,如果小于当前节点值,则继续在左子树中插入;如果大于当前节点值,则继续在右子树中插入。直到找到合适的位置插入新节点。

删除操作: 删除操作相对复杂一些。如果要删除的节点是叶子节点,则可以直接删除;如果要删除的节点只有一个子节点,则将其子节点替换到被删除节点的位置;如果要删除的节点有两个子节点,则通常选择该节点的前驱节点或者后继节点来替换被删除节点,并递归地删除用于替换的节点。

二叉搜索树的这些性质使得其在搜索、插入和删除等操作上具有较高的效率。然而,如果树的结构不平衡(比如极端情况下,树退化成链表),则操作的时间复杂度可能会退化到O(n),而不再是平衡状态下的O(log n)。因此,在实际应用中,通常会考虑使用平衡二叉搜索树(如AVL树、红黑树等)来保持搜索性能的稳定。


解法1 递归法

时间复杂度:在最坏情况下,时间复杂度为 O(h),其中 h 是树的高度。在一个平衡的二叉搜索树中,树的高度近似为 log(n),其中 n 是树中节点的数量。但是在最坏情况下,树可能会退化成链表,高度为 n。因此,在最坏情况下,时间复杂度为 O(n),在平均情况下,为 O(log n)。

空间复杂度:递归调用的栈空间取决于树的高度,因此空间复杂度也是 O(h)。在最坏情况下,树可能会退化成链表,空间复杂度为 O(n),在平均情况下,为 O(log n)。


/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode searchBST(TreeNode root, int val) {return helper(root,val);}public TreeNode helper(TreeNode root, int val){if(root == null) return null;if(root.val == val) return root;else if(root.val>val) {return searchBST(root.left,val);}else {return searchBST(root.right,val);} }
}

解法2 迭代法

时间复杂度:在最坏情况下,时间复杂度为 O(h),其中 h 是树的高度。在一个平衡的二叉搜索树中,树的高度近似为 log(n),其中 n 是树中节点的数量。但是在最坏情况下,树可能会退化成链表,高度为 n。因此,在最坏情况下,时间复杂度为 O(n),在平均情况下,为 O(log n)。

空间复杂度:这种迭代方法不使用递归,只使用了常量级的额外空间,因此空间复杂度是 O(1)。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode searchBST(TreeNode root, int val) {// 迭代法while(root != null){if(root.val > val){root = root.left;}else if(root.val < val){root = root.right;}else{return root;}}return null;}
}

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

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

相关文章

使用Python,maplotlib绘制树型有向层级结构图

使用Python&#xff0c;maplotlib绘制树型有向层级结构图 1. 效果图2. 源码2.1 plotTree.py绘制层级结构及不同样式2.2 plotArrow.py 支持的所有箭头样式 参考 前俩篇博客介绍了 1. 使用Python&#xff0c;networkx对卡勒德胡赛尼三部曲之《群山回唱》人物关系图谱绘制 2. 使用…

MySQL 使用 pt-archiver 删除数据

文章目录 前言1. 环境准备1.1 模拟造数1.2 工具安装 2. 删除数据2.1 批次删除表2.2 原理解析2.3 批处理思路 后记 前言 在线核心业务都会有日志表&#xff0c;随着业务持续运行&#xff0c;日志表每天都在增大&#xff0c;最后超过阈值触发空间使用率告警。DBA 处理空间告警时…

爬取某牙视频

爬取页面链接&#xff1a;游戏视频_游戏攻略_虎牙视频 爬取步骤&#xff1a;点进去一个视频播放&#xff0c;查看media看有没有视频&#xff0c;发现没有。在xhr中发现有许多ts文件&#xff0c;但这种不是很长的视频一般都有直接的播放链接&#xff0c;所以目标还是找直接的链…

数据结构-----再谈String,字符串常量池,String对象的创建、intern方法的作用

文章目录 1.字符串常量池1.1. 创建对象的思考2.2. 字符串常量池(StringTable)1.3. 再谈String对象创建1.4. intern方法 1.字符串常量池 1.1. 创建对象的思考 下面两种创建String对象的方式相同吗&#xff1f; public static void main(String[] args) {String s1 "hel…

【Elasticsearch查询】深度查询

文章目录 深度查询from/toScroll如何查询重要笔记保持搜索上下文环境存活手动清除切片 Search After排序查询注意Demo 深度查询 from/to 运行Search进行查询时&#xff0c;可以使用from和size参数对结果进行分页。 from参数定义了要获取的第一个结果的偏移量。size参数表示允…

我用 Navicat 的这些技能少加了好多班,也为公司挣了不少w

今天又用 Navicat 解决了一个数据同步的需求&#xff0c;财务又到账一笔收入....... 本文我将结合我过去的实践&#xff0c;给大家推荐一款数据库的运维工具。给大家呈现一下竟然可以用 Navicat 解决这些实际问题 。 熬了几个夜&#xff0c;毫无保留地将这些技能分享&#xf…

使用R语言进行判别分析

一、样本数据描述 2016年全国31个省、直辖市、自治区城镇居民人均消费支出水平划为2类&#xff0c;其中北京和上海划为一类&#xff0c;其余地区划为一类&#xff0c;将广东和西藏作为待判样本&#xff0c;具体划分数据如下表&#xff0c;试对数据进行判别分析&#xff0c;并将…

vue中动态引入图片

分析 很多时间&#xff0c;不管是vue2&#xff0c;还是vue3开发中都会遇到&#xff0c;动态渲染图片的功能&#xff0c;但是为什么我们直接将图片的路径直接赋值给变量的时候&#xff0c;图片渲染不出来&#xff0c;而通过require引入加载图片后却能正常渲染呢&#xff1f;主要…

解释什么是内连接、左连接和右连接,并给出每种连接的SQL示例

在关系型数据库中&#xff0c;连接&#xff08;JOIN&#xff09;是一种在查询中组合来自两个或多个表的行的方法。这些表通过一个或多个列中的相关值关联起来。SQL 提供了几种类型的连接&#xff0c;每种连接在处理表之间的关系和数据检索时都有其特定的方式。最常见的连接类型…

华为HarmnyOS TypeScript基础语法快速入门

华为HarmnyOS TypeScript基础语法快速入门 一、JavaScript、TypeScript、ArkTS二、TypeScript基础语法1. 基础类型2. 条件语句3. 函数4. 类5. 模块6. 迭代器 一、JavaScript、TypeScript、ArkTS ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&am…

Flask+Gunicorn中文乱码解决方案

在使用FlaskGunicorn部署应用时&#xff0c;发现中文的输出存在乱码的现象。这是因为Python的默认编码是ASCII&#xff0c;而ASCII并不支持中文字符。 解决Python中文乱码问题的首要任务是确保使用合适的编码方式。当你处理中文字符时&#xff0c;应该使用UTF-8编码。UTF-8是一…

Axios入门

1.概念 Axios是一个开源的可以用在浏览器和node.js的异步通信框架&#xff0c;他的主要功能是实现Ajax异步通信 2.Axios入门程序 2.1.准备json格式的文件 {"name": "小明","address": {"street": "雁塔","city"…

动画原理:表面形变算法的思考与总结

前言&#xff1a; 之前我的文章 Mesh形变算法_mesh算法-CSDN博客就有大致的讨论过&#xff0c;介绍的也比较粗略&#xff01;现在主要是想在Triangulated Surface Mesh Deformation方向上更深入的讨论一下&#xff01;结合今年我对这一块的学习谈谈我的理解~ 下面要介绍大致几…

Java设计模式——桥连模式

桥接模式简单来说就是通过将抽象部分和具体部分分离&#xff0c;使它们可以独立地变化。如果你的一个类存在多个变化维度&#xff08;如抽象和具体的实现&#xff09;。若使用继承来处理这些变化&#xff0c;将会导致类层次结构的急剧增加&#xff0c;难以管理和维护。并且&…

MySQL(基础篇)——函数、约束

一.函数 1.定义 函数是指一段可以直接被另一段程序调用的程序或代码。 2.字符串函数 常见如下&#xff1a; -- 字符串拼接 SELECT CONCAT(hello,MySql) AS CONCAT -- 将字符串全部转为小写 SELECT LOWER(HEllo MYSql) AS LOWER -- 将字符串全部转为大写 SELECT UPPER(Hello…

环境配置 |Jupyter lab/Jupyter Notebook 安装与设置

ipynb使用Jupyterlab/Jupyter Notebook 来编写Python程序时的文件,在使用时,可以现转换为标准的.py的python文件 1.Jupyter Lab 1.1.下载安装 环境&#xff1a;Linux pip install jupyterlab 1.2.使用 jupyter lab 点击后进入 1.3.jupyter lab更换内核 因为我的是在anac…

178文章复现:基于matlab的微震图像去噪

文章复现&#xff1a;基于matlab的微震图像去噪&#xff0c;利用同步压缩连续小波变换进行自动微震去噪和起始检测&#xff0c;SS-CWT 可对时间和频率变化的噪声进行自适应过滤&#xff0c;可以去除小幅值信号中的大部分噪声&#xff0c;检测地震事件并估算地震发生时间。程序已…

数据结构之树结构(上)

存储方式 数组存储方式的分析 优点&#xff1a;通过下标方式访问元素&#xff0c;速度快。对于有序数组&#xff0c;还可使用二分查找提高检索速度。 缺点&#xff1a;如果要检索具体某个值&#xff0c;或者插入值&#xff08;按一定顺序&#xff09;会整体移动&#xff0c;效…

C++实现计算复杂数学表达式

本文使用C实现Shunting-yard算法&#xff0c;将中缀表达式转换为后缀表达式&#xff0c;然后使用后缀表达式计算结果&#xff0c;实现了目前支持以下 四则运算&#xff08;、-、*、/&#xff09;开平方&#xff08;^&#xff09;取基数为 10 的对数&#xff08;L&#xff09;小…

小(2)型土石坝安全监测设施配置详解

小(2)型土石坝的安全监测是确保大坝稳定、安全运行的重要环节。为此&#xff0c;合理配置安全监测设施显得尤为重要。以下是对小(2)型土石坝安全监测设施配置的详细介绍。 一、渗流量监测 渗流量是反映大坝安全状况的关键指标之一。为准确监测渗流量&#xff0c;我们采用仪器量…