数据结构与算法(二叉搜索树)~ 介绍二叉搜索树以及力扣上几道二叉搜索树题目的方法和套路

简介: 数据结构与算法(二叉搜索树)~ 介绍二叉搜索树以及力扣上几道二叉搜索树题目的方法和套路

数据结构与算法(二叉搜索树)~ 介绍二叉搜索树以及力扣上几道二叉搜索树题目的方法和套路



1,二叉树的数据结构:

请参考文章:《数据结构与算法(二叉树)~ 介绍二叉树以及力扣上几道二叉树题目的方法和套路~ 第一部分


❀ 二叉搜索树的特点:

● 整个二叉搜索树非常有特点,根大于左子树, 小于右子树

● 二叉搜索数的中序遍历是有序的~升序的


2,二叉树的力扣算法题:


37.png


✿ 总结一些小套路吧 (没有通用的套路,就讲一下方法哈):

(1)108_将有序数组转换为二叉搜索树 的方法 和 套路:

方法一:利用二叉搜索树特点:根大于左,小于右【将数组不断地按中间点划分成左右子树】


(2)173_二叉搜索树迭代器 的方法 和 套路:

方法一:迭代器(容器,提前存储了按照一定规则摆放的数据~ 中序遍历(递归)),然后定义一个全局索引变量来辅助是否有next和进入next

方法二:迭代器(容器,提前存储了按照一定规则摆放的数据~ 中序遍历(迭代)),然后定义一个全局索引变量来辅助是否有next和进入next~因为题意要最小的,所以next方法,next到最后一层后【左为null】,该值【根】便是所求,然后切换到右边


(3)230_二叉搜索树中第K小的元素 的方法 和 套路:

方法一:中序遍历【递归法~辅助变量,递归到第k次 便是所求】

方法二:中序遍历【迭代法~辅助变量,pop掉k个数,便是所求】


(4)450_删除二叉搜索树中的节点 的方法 和 套路:

方法一:

       //删除值大于 根值,则只能在左子树删除目标,删除值小于根值,只能子啊右子树删除目标。

      //当删除的目标就是根值时,考虑:① 根是叶子 【根置空】 ② 有右子树 【根用后驱结点值覆盖,然后对右子树的重复结点进行删除】

      ③ 没有右子树【只能到左子树找了,根用前驱结点值覆盖,然后对左子树的重复结点进行删除】


(5)530_二叉搜索树的最小绝对差 的方法 和 套路:

      跟 783_二叉搜索树节点最小距离(一模一样。)

方法一:

       //中序遍历 (二叉搜索树的中序遍历是递增的,最小绝对值,只需要用前一个值-后二个值得出)

       //从第二个结点开始,每次进入一个新的结点,都要不断的更新最小距离


(6)700_二叉搜索树中的搜索 的方法 和 套路:

方法一:递归实现:① 若是值 = 根值,直接返回根结点;② 若是值 > 根值,只能到右子树中找,否则只能在左子树中找。

方法二:迭代实现:当一直不是 根值时,判断若 值小于根值,则只能在左区域找,否则只能在右区域找。


(7)701_二叉搜索树中的插入操作 的方法 和 套路:

方法一:递归实现

方法二:迭代实现:

       ①一开始:root == null; 创建一个结点(值即传入的val),然后返回给结点。

       ② 若值= 根值,重复了,直接return

       ③ 从根开始不断地遍历【需要记录一下父节点,以便跟插入结点构成联系】:(若值 > 父结点值【切换到右区域】),否者切换到左区域。直到找到一个 null的空地来建立结点:

       ④ 判断父结点:

       ● 没有左、右结点(判断一下父结点值和传入的值,从而得知插入是左还是右结点)

       ● 有左结点,直接插入在右结点位置

       ● 最后, 则插入在左结点位置


(8)783_二叉搜索树节点最小距离 的方法 和 套路:

方法一:(看 上面的 530_二叉搜索树的最小绝对差)


(9)938_二叉搜索树的范围和 的方法 和 套路:

方法一:遍历(随便一种遍历方式都可以,去比较遍历到的当前结点是否在【low high】范围内,是则直接添加即可了)

方法二:递归,利用二叉搜索树的特点(根大于左子树,根小于右子树):

当前结点(根值 小于 low)只能考虑右子树了;当前结点(根值 大于 low)只能考虑左子树了;当前结点(根值 处在【low high】 范围内)累加当前结点数据同时考虑左子树区域 + 右子树区域;

方法三:迭代实现 【队列:当前层的结点一个一个拿出来判断,若当前结点值范围大于high,考虑左子树区域,当前结点值小于low,考虑右子树区域,等于直接累加范围,然后左右子树区域都有可能】


(10)98_验证二叉搜索树 的方法 和 套路:

方法一:● 官网是通过重载接口方法使用递归法,(参数:根,最小,最大)~ 实现了局部到整体都满足: 二叉搜索树:根大于左子树,大于左边整棵树的最大值哦,同理,根小于右子树,小于右边整棵树的最小值。

方法二:递归或者迭代(中序遍历),只要出现当前结点小于前一个结点的值【false】


(11)99_恢复二叉搜索树 的方法 和 套路:

方法一:先中序遍历将有序的元素存放到容器 list 里,然后遍历容器找出两个有问题的结点。扫描 list的结果,找出可能存在错误交换的节点x和y【利用升序,

第一个错误结点:是出现递减的前一个【突然变大,导致后边那个结点受到影响,与之关系的递增被破坏】,

第二个错误结点,是出现递减的后一个【突然变小,导致前边一个结点受到影响,与之关系的递增被破坏】

方法二:迭代遍历(其实是第一种方法的简单优化一下而已,将第一种方法的中序递归改成中序迭代,将第一种存储数据元素于容器list,再找到问题结点优化成直接找,标记出两个问题结点,然后进行交换)

目录
相关文章
|
30天前
|
存储 算法
算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!
给定一个正整数数组和目标值target,找出总和大于等于target的最短连续子数组长度。利用滑动窗口(双指针)优化,维护窗口内元素和,通过单调性避免重复枚举,时间复杂度O(n)。当窗口和满足条件时收缩左边界,更新最小长度,最终返回结果。
|
2月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
116 6
|
2月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
300 0
|
3月前
|
机器学习/深度学习 数据采集 传感器
具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)
具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)
274 0
|
1月前
|
存储 算法 编译器
算法入门:剑指offer改编题目:查找总价格为目标值的两个商品
给定递增数组和目标值target,找出两数之和等于target的两个数字。利用双指针法,left从头、right从尾向中间逼近,根据和与target的大小关系调整指针,时间复杂度O(n),空间复杂度O(1)。找不到时返回{-1,-1}。
|
27天前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
107 0
|
1月前
|
机器学习/深度学习 算法 物联网
基于遗传方法的动态多目标优化算法
基于遗传方法的动态多目标优化算法
|
9月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
7月前
|
机器学习/深度学习 存储 算法
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
本文系统讲解从基本强化学习方法到高级技术(如PPO、A3C、PlaNet等)的实现原理与编码过程,旨在通过理论结合代码的方式,构建对强化学习算法的全面理解。
1791 10
18个常用的强化学习算法整理:从基础方法到高级模型的理论技术与代码实现
|
6月前
|
存储 监控 算法
公司内部网络监控中的二叉搜索树算法:基于 Node.js 的实时设备状态管理
在数字化办公生态系统中,公司内部网络监控已成为企业信息安全管理体系的核心构成要素。随着局域网内终端设备数量呈指数级增长,实现设备状态的实时追踪与异常节点的快速定位,已成为亟待解决的关键技术难题。传统线性数据结构在处理动态更新的设备信息时,存在检索效率低下的固有缺陷;而树形数据结构因其天然的分层特性与高效的检索机制,逐渐成为网络监控领域的研究热点。本文以二叉搜索树(Binary Search Tree, BST)作为研究对象,系统探讨其在公司内部网络监控场景中的应用机制,并基于 Node.js 平台构建一套具备实时更新与快速查询功能的设备状态管理算法框架。
240 3

热门文章

最新文章