【JAVA/读书随笔】Chapter 26 二叉查找树(BST)

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx 政府科技管理者如何提升科技成果转化项目进场交易的备案效率? 立即下载

二叉查找树(Binary Search Tree, BST)

二叉查找树的重要特点是:左子树一定不大于父结点,右子树一定比父结点大,所以可以将搜索时间复杂度控制在 log n 的水平上。

1. 表示 BST


定义结点:

class TreeNode<E> {
  E element;
  TreeNode<E> left;
  TreeNode<E> right;
  
  public TreeNode(E e) {
    element = e;
  }
}

2. 查找 BST

参考 BST 的重要特点,依照大小的模式寻找:

    若待搜索元素小于结点,搜索左子树;

    若待搜索元素大于结点,搜索右子树;

    若待搜索元素等于结点,返回true;


3. 插入一个元素


在 BST 中插入一个元素,关键在于确定在树中插入元素的位置,思路是确定新结点的父结点所在的位置。可以借助 2 中查找 BST 的方式找到插入位置。


4. 遍历(traverse)

BST 的遍历是很重要的操作,主要应用的就是迭代方法。以下是五种常用的遍历模式。


中序遍历(inorder)                  左——》中——》右

先遍历左子树,接下来是父结点,然后是右子树。特点是 以递增顺序显示一个 BST 中所有结点。

前序遍历(preorder)              中——》左——》右

先遍历父结点,接下来是左子树,最后是右子树。典型应用是打印结构文档。

后序遍历(postorder)            左——》右——》中

先遍历左子树,接下来右子树,最后是父结点。典型应用是找出目录中文档的个数,在找出根目录的大小之前得到每个子目录的大小。

广度优先遍历(breadth-first)
广度优先遍历方法逐层方位树中的结点。首先访问根节点,然后从左往右访问根结点的所有孩子,再从左往右访问根结点的所有孙子结点。
深度优先遍历(depth-first)


5. 删除 BST 中的一个元素

为了从一个 BST 中删除一个元素,我们需要定位该元素所在位置和它的父结点位置。假设 current 指向二叉查找树中包含该元素的结点,而 parent 指向 current 结点的父结点。 current 结点可能是 parent 结点的左孩子,也可能是右孩子。这里需要考虑下面两种情况:

1. 若 current 结点没有左孩子,这时需要将该结点的父结点和当前结点的右孩子相连。

2. 若 current 结点有一个左孩子,那么假设 rightMost 指向 current 左子树中的最大元素,该元素的父结点是 parentOfRightMost ,那么我们要做的就是用 rightMost 元素替换 current 元素,将 parentOfRightMost 与 rightMost 的左子树相连。


6. 迭代器

利用之前的各种遍历模式+java.util.Iterator 接口,我们可以定义自己的迭代器,注意,java.util.Iterator 接口定义了三个函数:

1. +hasNext(): boolean

2. +next(): Object

3. +remove(): void


7. 数据压缩:哈夫曼编码(Huffman Coding Tree)


山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md 【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。 立即下载

相关推荐

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

【JAVA】堆实现

二叉堆的JAVA实现

不会飞的超人先生的博客 4410

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

【算法】几种常用排序算法

1. 冒泡排序(Bubble Sort) 冒泡排序算法需要遍历几次数组,在每次遍历中,比较 连续相邻 的元素。如果某一对元素是降序,则互换它们的位置;否则,保持不变。冒泡排序法需要遍历 n-1 次数组,每次遍历最佳情况是不用交换,则时间复杂度为 O(n) ,最差情况是每次都要交换,对于第 k 个要交换 n-1-k 次,此时时间复杂度是 O(n^2) Trick:如果在某次遍历中没有发生交换,说

不会飞的超人先生的博客 2964

避开这些坑!晶圆封装中Wire Bonding(引线键合)的5种常见不良与实战调试心得

本文深入探讨晶圆封装中Wire Bonding(引线键合)的5种常见不良现象,包括Wire Offset、BSOB不良、球径/球厚异常、弧度不良和IMC问题。通过实际案例和参数优化方案,帮助工程师提升封装质量和可靠性,特别适用于半导体封装领域的专业人士。

weixin_33672109的博客 527

别怕,“卷积”其实很简单

首先给大家讲一个关于卷积的小故事:小明是杭州某互联网大厂的员工,每天996十分辛苦,但小明最近爱上了打台球,经常不在工位。这天,小明的主管让小明改一个需求,小明却到楼下找产品部小丽打台球去了,被主管发现,他非常气愤,扇了小明一巴掌(注意,这就是输入信号,脉冲)。于是小明脸上会渐渐地(贱贱地)鼓起来一个包,小明的脸就是一个系统,而鼓起来的包就是小明的脸对巴掌的响应。好,这样就和信号系统建立起来意义对应的联系。

Machine Learning with Tutors 3182

【CDMI-PROJECT】DAILY SUMMURY

1. Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解 其中:@BeforeClass,@AfterClass是Junit4中新添加进去的 如果Run as —>Junit Test,运行含有@Test注释的方法是,那么所有注解方法都将被执行,所含的执行顺序是: @BeforeClass ,@Be

不会飞的超人先生的博客 2879

看不懂分子动力学模拟的结果?一文读懂RMSD曲线

随后,将每一帧结构与初始模板进行叠合,计算对应原子的平均偏移量,即RMSD。总之,掌握 RMSD 的解读方法,就等于抓住了评估分子动力学模拟成败与质量的“总开关”。①在模拟初始阶段,RMSD会从0迅速上升,这是蛋白质从静态晶体或模型结构释放到溶液环境中并逐渐适应的正常过程。②经过一段时间后,曲线不再系统性上升或下降,而是围绕一个平均值,小幅度地上下波动,形成一个稳定的“平台”。这种情况下,RMSD 在初始快速上升后,并未进入平台,而是持续甚至加速上升,始终未见收敛。🔍 如何解读不同趋势的RMSD曲线。

weixin_46587777的博客 4896

【剑指OFFER-二刷】

剑指offer二刷

不会飞的超人先生的博客 1382

rv1126 读取sensor输入,输出到屏幕显示【RK_MPI API接口】

rv1126 libdrm VO

学习记录 1万+

引文:当SVM转角遇上Copy-on-Write (COW)

本文分析了Linux内核中fork系统调用的Copy-on-Write(COW)机制实现原理。重点阐述了fork时父子进程共享物理页面、标记页表项为只读并在写操作时触发COW的流程,以及在SVM环境中通过MMU Notifier机制保持CPU和GPU页表同步的解决方案。文章详细描述了COW的三个阶段:初始共享、写入触发和页面复制,并说明了MMU Notifier的回调注册和处理流程,确保异构计算环境下内存一致性。

图形/计算GPU的驱动与虚拟化技术分享园地 2675

【刷题笔记/剑指Offer】41-50

41. 翻转单词顺序列 42. 左旋转字符串 43. 扑克牌顺子 44. 数m 45. 求1+2+3+......+n 46. 不用加减乘除做加法 47. 把字符串转换成整数 48. 数组中重复的数字 49. 构建成绩数组 50. 正则表达式匹配

不会飞的超人先生的博客 884

详解大端模式和小端模式

详解大端模式和小端模式 一、大端模式和小端模式的起源         关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

ce123的技术博客 19万+

【JAVA】网络概念总结

在这里总结一下遇到的JAVA网络概念。1. Applet Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同。 含有Applet的网页的HTML文件代码中部带有 “< applet >” 和 “< /applet > “这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的

不会飞的超人先生的博客 788

Vue3 - 超详细“纯前端“将文件上传到阿里云OSS对象存储,最新阿里云前端直传音频、视频、图片、文件、office文档等任意文件,vue3单个或批量从本地选择文件,秒传到阿里云oss无需后端接口!

vue3,阿里云oss存储,前端直传oss,上传图片/office文档/音视频/zip压缩包到阿里云oss,项目中上传文件到阿里云oss详细教程,如何将本地文件上传到阿里云OSS存储,纯前端实现阿里云OSS上传,纯前端直传至阿里OSS对象存储教程,如何解决上传文件到阿里云OSS本地环境调试出现跨域问题,直传阿里云oss跨域报错解决,前端直接上传文件到oss服务端,不经过后端直传,浏览器直接上传文件,阿里云oss上传sdk官方文档,阿里云错误,解决这个问题,上传很慢,一直签名失败,权限,不经过后端,纯前端直传

🏆 前端领域优质创作者 1万+

关务管理项目专题:SAP 与关衡关务系统的进出口报关业务集成(1)需求和方案整理

一个拥有进出口业务的企业就需要报关,而关务系统就是用来辅助企业日常进出口报关,同时数字化、合规化报关业务的有效工具。本章属于关务管理项目专题系列,以 SAP 与关衡关务系统的进出口报关业务集成为实例,详细讲解报关业务的需求和方案整理。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 2078

【刷题笔记/剑指Offer】Part 3 (21-30)

21. 栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 好吧,这个题目之前见过,但是这次遇到还是想不出来。。总之,思路是构建一个栈模仿题目操作,另外需

不会飞的超人先生的博客 764

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【刷题笔记/剑指Offer】51-61

1. 字符流中第一个不重复的字符

不会飞的超人先生的博客 655

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【刷题笔记/剑指Offer】Part 1 (1-10)

剑指Offer,在牛客网上可以在线刷题,感觉比看书本要来的更爽一些,现在开始刷起来! 1. 二维数组中的查找 public class Solution { public boolean Find(int [][] array,int target) { int i, j; for(i = 0; i < array.length; i++) {

不会飞的超人先生的博客 614

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【JAVA】Java文件的读写

1. 写文件(PrintWriter) 读与写都要有 File 关键字的配合,如下例: File file = new File(filepath/name); if (file.exists()) { file.delete(); file.createNewFile(); } else file.createNewFile(); PrintWriter output

不会飞的超人先生的博客 608

【刷题笔记/剑指Offer】Part 2 (11-20)

11. 二进制中1的个数 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

不会飞的超人先生的博客 588

【Servlet】Hello World

Servlet 的 hello world 创建

不会飞的超人先生的博客 574

【JAVA】JVM

1. 计算机存储系统金字塔模型 2. JDK/JRE/JVM之间的关系 3. JVM运行原理 4. GC运行原理

不会飞的超人先生的博客 550

【编程之美/读书笔记】Chapter 1 游戏之乐

这里就不写每个问题的题目了,只是记录一下自己的总结和心得。 1.1 让CPU占用率听你指挥 这个题目我刚接触的想法是和多核多线程要扯上关系的,因为自己写个死循环只能跑到CPU 35%左右的占用率,但是现在java多线程还没看,所以参考了一下单核的思想,决定过几天好好看看java多线程,再来解决这个问题,下面先总结一下目前的几点收获: 复习了一下 CPU 的频率,时钟周期的概念,举个例

不会飞的超人先生的博客 538

Spring MVC

1. 典型配置典型配置可以有xml配置方法和java class配置方法,在Spring实战中作者建议用java class方法,原因是xml的错误检查机制没有java class方式好。在这里把两种配置方法都列在下面:1.1 xml配置方法 1.1.1 pom.xml 主要是 Maven 的配置文件,用来添加项目中依赖的jar包,包括spring-context/spring-web/spri

不会飞的超人先生的博客 527
上一篇: 【JAVA/辨析】Java 中Comparable和Comparator区别比较
下一篇: 【编程之美/读书笔记】Chapter 1 游戏之乐
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值