目录

二叉查找树性质

插入数据——插入1

插入数据——插入4

删除节点——节点无子结点的情况

删除节点——有一个字节点的情况

删除节点——节点有子树的情况

查找结点

解说

补充说明

来源


二叉查找树(又叫作二叉搜索树或二叉排序树)是一种数据结构,采用了图的树形结构 (关于树形结构的详细说明请参考 4-2 节)。数据存储于二叉查找树的各个结点中。


二叉查找树性质

这就是二叉查找树的示例。结点中的数字便是存储的数据。此处以不存在相同数字为前提进行说明。

二叉查找树有两个性质。第一个是每个结点的值均大于其左子树上任意一个结点的值。比如 结点9大于其左子树上的3和8。

同样,结点15也大于其左子树上任意一个结点的值。

第二个是每个结点的值均小于其右子树上任意一个结点的值。比如结点 15 小于其右子树上的 23、17和28。

根据这两个性质可以得到以下结论。首先,二 叉查找树的最小结点要从顶端开始,往其左下的末端寻找。此处最小值为3。

反过来,二叉查找树的最大结点要从顶端开 始,往其右下的末端寻找。此处最大值为28。

插入数据——插入1

下面我们来试着往二叉查找树中添加数据。比如添加数字1。

首先,从二叉查找树的 顶端结点开始寻找添加 数字的位置。将想要添 加的1与该结点中的值 进行比较,小于它则往左移,大于它则往右移

由于1<9,所以将1往左移.

由于1<3,所以继续将1往左移,但前面已经没有结点了,所以把 1 作为新结点添加到左下方。

这样,1的添加操作便完成了.


插入数据——插入4

接下来,我们再试试添加数字4。

和前面的步骤一样, 首先从二叉查找树 的顶端结点开始寻找添加数字的位置。

由于4<9,所以将其往左移.

由于4>3,所以将其往右移。

由于4<8,所以需要将其往左移,但前面已经没 有结点了,所以把 4 作为新结点添加到左下方。

于是4的添加操作也完成了


删除节点——节点无子结点的情况

接下来看看如何在二叉查找树中删除结点。比如我们来试试删除结点28

如果需要删除的结点没有子结点,直接删掉该结点即可。


删除节点——有一个字节点的情况

再试试删除结点8。

如果需要删除的结点只有一个子结点,那么先 删掉目标结点……

然后把子结点移到被删除结点的位置上即可。


删除节点——节点有子树的情况

最后来试试删除结点9

如果需要删除的结点有两个子结点,那么先删 掉目标结点……

然后在被删除结点的左子树中寻找最大结点……

(Tips :  删除9的时候,我们将“左子树中的最大结点”移动到了删除结点的位置上,但是根据二叉查找树的性质可知,移动“右子树中的最小结点”也没有问题。)

最后将最大结点移到被删除结点的位置上。这样一来,就能在满足二叉查找树性质的前提下删除结点了。 如果需要移动的结点(此处为4)还有子结点,就递归执行前面的操作(关于递归,请参照7-4节的内容)。


查找结点

下面来看看如何在二叉查找树中查找结点。比 如我们来试试查找12。

从二叉查找树的顶端结点开始往下查找。和添 加数据时一样,把12和结点中的值进行比较, 小于该结点的值则往左移,大于则往右移。

由于12>4,所以往右移。

找到结点12了。

解说

我们可以把二叉查找树当作是二分查找算法思想的树形结构体现(二分查找的详细 说明在 3-2 节)。因为它具有前面提到的那两个性质,所以在查找数据或寻找适合添加 数据的位置时,只要将其和现有的数据比较大小,就可以根据比较结果得知该往哪边移 动了。

比较的次数取决于树的高度。所以如果结点数为 n,而且树的形状又较为均衡的话, 比较大小和移动的次数最多就是 log2n。因此,时间复杂度为 O(logn)。但是,如果树的 形状朝单侧纵向延伸,树就会变得很高,此时时间复杂度也就变成了 O(n)。

补充说明

有很多以二叉查找树为基础扩展的数据结构,比如“平衡二叉查找树”。这种数据 结构可以修正形状不均衡的树,让其始终保持均衡形态,以提高查找效率。

另外,虽然文中介绍的二叉查找树中一个结点最多有两个子结点,但我们可以把子结点数扩展为 m(m 为预先设定好的常数)。像这种子结点数可以自由设定并且形状均衡的树便是 B 树

来源

《我的第一本算法书》  [日]石田保辉 宫崎修一/著    张贝/译

《我的第一本算法书》阅读笔记 1-8 二叉查找树相关推荐

  1. 【我的第一本算法书】笔记

    此笔记仅为我本人学习过程中记录的个人理解,欢迎交流. 如何选择算法 我们最为重视的是算法的运行时间,即从输入数据到输出结果的过程所花费的时间 时间复杂度是一个可以描述算法运行时间的函数,常用大O符号来 ...

  2. 我的第一本算法书--读书笔记

    序–算法的基本知识 1.什么是算法 计算或解决问题的步骤. 算法和程序的区别 程序是以计算机能够理解的编程语言编写的,算法是以人能够理解的方式描述. 排序 排列整数的算法 选择排序 查找最小的数字并交 ...

  3. 《我的第一本算法书》阅读笔记 1-6 哈希表原理图解

    目录 普通数组线性查找工作流程 哈希表怎么存储数据 出现冲突怎么办?(eg.链地址法) 哈希表怎么查找数据 解说 补充说明 来源 在哈希表这种数据结构中,使用将在 5-3 节讲解的"哈希函数 ...

  4. 《我的第一本算法书》阅读笔记 6-2 k-means 算法

    1 什么是聚类 1.1 将相似的对象分为一组 聚类就是在输入为多个数据时,将"相似"的数据分为一组的操作.1 个组就叫作 1 个 "簇".下面的示例中每个点都代 ...

  5. 算法基础--《我的第一本算法书》--(算法学习一)

    根据<我的第一本算法书>做的学习笔记,刚刚接触,里面根据自己的理解做的有删减,欢迎留言交流. 插图索引 图1.1         链表结构... 4 图1.2         数组概念图. ...

  6. 造球粒径检测算法论文阅读笔记

    造球粒径检测算法论文阅读笔记 1.图像感兴趣区域的划分 2.生球区图像高斯滤波 3.生球区域与阴影区域的分割 4.对生球区域的分类标记(区分上下层球) 1.图像感兴趣区域的划分 依据光照的不同,将图像 ...

  7. 【计算机视觉】运动目标检测算法文献阅读笔记

    先前在博客中对常见的运动目标检测算法有写过一篇总结,详情请参考:http://blog.csdn.NET/kezunhai/article/details/8830787.本文是在校期间写的部分阅读笔 ...

  8. 《Rigging the Lottery》 RigL算法 论文阅读笔记

    Rigging the Lottery: Making All Tickets Winners authors: Utku Evci Trevor Gale Jacob Menick Pablo Sa ...

  9. keras cnn注意力机制_2019 SSA-CNN(自注意力机制)目标检测算法论文阅读笔记

    背景 <SSA-CNN Semantic Self-Attention CNN for Pedestrian Detection>是2019 的工作,其作者来自于南洋理工.这篇文章主要是做 ...

最新文章

  1. 2020-10-09
  2. 刻意练习:LeetCode实战 -- Task22. 二叉树的中序遍历
  3. Docker图形化管理工具之Portainer
  4. linux设备驱动程序调试方法,Linux设备驱动程序学习(2)-调试技术
  5. oracle 换行符_python实现自动化报表(Oracle/plsql/Excel/多线程)
  6. 一封陌生土耳其网友的来信
  7. leetcode632. 最小区间(堆+多指针)
  8. 麦马计算机科学 UBC工程,2020年UBC文书题目
  9. 将多张图片转为avi视频,再转为h264文件
  10. C3P0数据源和Tomcat jdbc数据源的基本配置
  11. python从入门到放弃-学Python方法用错,直接从入门到放弃!
  12. java玻璃效果_swing透明效果(没aero毛玻璃那么好看)
  13. debian stretch + kernel 4.4 固件发布(支持硬件加速),可安装kodi
  14. 四川省高中计算机考试,四川高中信息技术学业水平考试时间
  15. 前端学习/ Day1/HTTP简单易懂/GET POST/HTTP特性/HTTP与HTTPS/HTTP版本演变/加解密数字签名数字证书
  16. 轻轻松松实现角度转换(弧度度分秒)
  17. 单片机常用之晶振电路工作原理简述
  18. 计算机键盘突然失灵,笔记本键盘突然用不了怎么办_笔记本键盘突然失灵怎么回事-win7之家...
  19. HTML5 Canvas 绘制加拿大枫叶旗
  20. easyPOI导出时间字段注意事项

热门文章

  1. 1w 字的 pandas 核心操作知识大全
  2. Android 微信支付调不起
  3. 博傻理论(greater fool theory)
  4. 【Nginx】如何基于主从模式搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!
  5. 我去微信找师弟,问他的「编程能力」从什么时候开始突飞猛进的?
  6. 计算机音乐谱大全强军战歌,《强军战歌,钢琴谱》阎维文(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...
  7. C# Excel导入导出
  8. pdf怎么转换成word格式呢?
  9. C++版本 17:最好的草
  10. RSI相对强弱指标策略-指标定义、计算公式与策略思考