数据结构--树(笔记)

news2024/9/25 3:28:11

文章目录

  • 1. 含义及术语
  • 2. 应用
  • 3. 常见二叉树种类
    • ① 二叉树(Binary tree)
      • 一般树和二叉树的区别
    • ② 完美二叉树(Perfect Binary tree)
    • ③ 完全二叉树(Complete Binary tree)
    • ④ 满二叉树(Full Binary tree)
      • 完美二叉树、完全二叉树和满二叉树
    • ⑤ 平衡二叉树(Balanced Binary tree)
      • 二叉树与二叉搜索树
      • 平衡树
      • 平衡二叉搜索树
        • AVL树
  • 4. 二叉搜索树CRUD时间复杂度O(logn)
  • 5. 其它常见树
  • 6. 面试
  • 7. 内容出处

1. 含义及术语

① 树:类似于一个家谱(或者说一颗大树)。 树结构用来表示一种层级关系
② Root :根节点。可以理解为一个大家族的祖先
③ Edge:可以理解为连接前后辈的纽带(今后看到边就可以知道它下面一定有子节点)
④ Key:可以理解为家庭成员的姓名
⑤ Siblings:兄弟节点
⑥ Subtree:子树。可以理解为后辈又组建了自己的小家庭
⑦ Leaf nodes:叶节点。这个大家族到今天为止最新的一代人(G、H、I、J)
⑧ 树的深度(这个家族目前有几代人):由上往下(从A往下数)
⑨ 数的高度(这个家族目前有几代人):由下往上(从J这一辈往上数)
⑩ 如何衡量树的深度和高度? 数边数、数行数(或者说level–等级)
在这里插入图片描述

2. 应用

① 公司职位等级表
在这里插入图片描述
                                      (图片来源:百度)
② Windows文件系统中的文件路径设计(怎么设计其实是软件工程的问题0
在这里插入图片描述
在此电脑里查询某个应用时也是一个文件夹一个文件夹往下查
③ Linux文件系统中的文件路径设计
在这里插入图片描述
/ – 根目录
其他目录 – 子目录
/home/aria/Documents – 一个文件路径
注:
1> 文件系统为什么使用树状结构?
因为它可以对文件和目录进行有效的组织和管理,还可以定位或者说访问特定的文件目录(只需提供文件路径)
2> vscode:终端输入tree命令可以查看当前文件夹的树结构
在这里插入图片描述

④ 计算机语言设计学(以HTML为例):head可以看作祖先
在这里插入图片描述
⑤ 搜索引擎(BING、百度等)中存储网页的结构信息
⑥ IDE(像vscode等大型编译器)中的语法分析:表述语法树
⑦ 决策树:表述决策过程
⑧ 画图等软件的菜单栏
在这里插入图片描述
在这里插入图片描述

3. 常见二叉树种类

        在不同领域、不同范围内不同研究方向内会有不同的树,这里只列举一些常见的树。

① 二叉树(Binary tree)

特点:每一个父节点最多拥有2个子节点。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。
在这里插入图片描述
(图片来源:wiki)
注:
三叉树:每一个父节点最多拥有3个子节点。
k叉树(英文写法:k - ary tree):每一个父节点最多拥有k个子节点。

一般树和二叉树的区别

【数据结构】树与二叉树的区别
在这里插入图片描述
(图片来源:wiki)

② 完美二叉树(Perfect Binary tree)

特点:每个父节点都有2个子节点且最年轻的那代人都是同一个辈分或者说同一个等级的
在这里插入图片描述
(图片来源:百度)

③ 完全二叉树(Complete Binary tree)

特点:跟完美二叉树很类似(almost perfect, 近乎完美),区别在于它最新一代不一定是同一辈(例如:此时最新一代的5就和上一代的5、6、7产生了一个深度差)且最后一代人必须靠左对齐。
在这里插入图片描述
(图片来源:wiki)
反例(不是完全二叉树):
在这里插入图片描述

④ 满二叉树(Full Binary tree)

特点:有0个子节点或者2个子节点
在这里插入图片描述

完美二叉树、完全二叉树和满二叉树

完美二叉树, 完全二叉树和完满二叉树

⑤ 平衡二叉树(Balanced Binary tree)

特点:每个节点的左右子树深度差(或者说)高度差都不超过1的二叉树。
在这里插入图片描述

下述所有截图均来自wiki百科

二叉树与二叉搜索树

在这里插入图片描述
在这里插入图片描述

平衡树

特点:每个节点的左右子树深度差(或者说)高度差都不超过1在这里插入图片描述
在这里插入图片描述
上述第一个不是平衡树的原因在于:9、76、54这些节点左右子树的高度差大于1
在这里插入图片描述
在这里插入图片描述

平衡二叉搜索树

在这里插入图片描述

AVL树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此动画演示了不断将节点插入AVL树时的情况,并且演示了左旋(Left Rotation)、右旋(Right Rotation)、右左旋转(Right-Left Rotation)、左右旋转(Left-Right Rotation)以及带子树的右旋(Right Rotation with children)。

4. 二叉搜索树CRUD时间复杂度O(logn)

在这里插入图片描述
问:如何更直观的得出O(logn)的结论?
答: 数学运算:更直观一点
如何直观的理解 O(logn) 时间复杂度的神奇之处
注:
①树的时间复杂度有的跟节点数有关,有的跟边数有关。通常情况下都跟节点数有关。
② 堆也是O(logn)。堆有最大堆和最小堆之分

5. 其它常见树

① 线段树( 二叉搜索树):区间查询 O(logn)
② 字典树 (Trie树): O(M) m是键的长度
③ 图(邻接表、邻接矩阵):单源最短路径算法 O(nm)或者O(n*n)
④ 红黑树(图片来源:wiki)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 面试

        一般就是问我们对于某个树的理解(时间复杂度如何分析、常见应用等方面),通常情况下二叉树、平衡二叉树比较常见,红黑树也有可能。就算让让分析指定的树且比较复杂,面试官也一定会先介绍一下这种树,然后再问我们如何理解。
        算法岗位另说。算法岗位需要对树这个数据结构有很多的了解,因此面试时可能还会让列举一些其它的树,再让谈一下对它们的理解。

7. 内容出处

数据结构

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

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

相关文章

基于STM32开发的智能门锁系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化密码输入与验证门锁控制与状态指示Wi-Fi通信与远程监控应用场景 家庭智能门锁办公室智能门禁系统常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门锁系统通过集成键盘模块…

自学编程从哪个语言入手比较好?

自学编程时选择哪个语言作为起点,仍然取决于你的个人兴趣、学习目标和职业规划。希望以下建议可以帮到你。 Python: 如果你对数据分析、机器学习、人工智能、Web 开发或自动化脚本编写等领域感兴趣,Python 是一个非常好的起点。它的语法简洁…

java如何通过jdbc操作数据库

1. 安装JDBC 官网地址:官网地址选择 下载后,解压缩,然后将mysql-connector-j-9.0.0.jar文件放到项目目录下 编写操作数据库代码 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql…

20240819 每日AI必读资讯

📚AI爆料人遭全网封禁!OpenAI等25个机构祭大招,一眼辨别AI机器人 - 最近半个月,全网被OpenAI的「AI爆料人」「草莓哥」iruletheworldmo愚弄。所有人没有等他预测的GPT-4o large模型,反被AI初创MultiOn创始人揭穿身份—…

Squid:概念、代理案例

目录 Squid 缓存代理 Web代理的工作机制 代理类型 传统代理 透明代理 使用代理的好处 示例和案例 Squid安装示例 使用源码包安装Squid 一些其他的安装参数(安装用时较长) 为什么异步io要指定线程数? 配置和初始化Squid 运行测试…

大咖齐聚!2024深圳eVTOL展首批发言嘉宾阵容亮相!

大咖齐聚!2024深圳eVTOL展首批发言嘉宾阵容亮相! 由上海市航空学会、广东省航空航天学会主办的2024深圳eVTOL产业发展大会暨低空经济展览会将于9月23-25日在深圳坪山燕子湖国际会展中心盛大召开。 2024深圳eVTOL产业发展大会由主论坛与低空经济、航电系…

一年秀一次!稚晖君的人形机器人上新了,还有开源、免费彩蛋

一年一秀,稚晖君的第二代人形机器人来了。 灵巧小手,正在麻将桌上叱咤风云: 不对不对,让我们先看看整体气质: 然后是常规家务,能看出来也是非常熟练: 在大模型风靡的 2024 年,如果说…

FreeRtos----------- 同步互斥

一、同步的缺陷:全局变量协同两个任务 1.建立两个任务:CalcTask 、LcdPrintTask xTaskCreate(CalcTask, "task1", 128, NULL, osPriorityNormal, NULL);xTaskCreate(LcdPrintTask, "task2", 128, &g_Task2Info, osPriorityNorm…

详解Element-UI el-table表格中勾选checkbox(selection)多选删除

本节讲解的是关于组件库中el-table组件多选删除功能的实现。 1.Vue文件内的引用 2.页面数据 3.存储多选数据 4. 处理多选数据 这里通过循环的方式找到数据并对数据删除,这种方式易于理解,但不一定是最优方案

springboot的自动配置和怎么做自动配置

目录 一、Condition 1、Condition的具体实现 2、Condition小结 (1)自定义条件 (2)SpringBoot 提供的常用条件注解 二、Enable注解 三、EnableAutoConfiguration 注解和自动配置 1、EnableAutoConfiguration的三个注解属性…

LLama 3 跨各种 GPU 类型的基准测试

2024 年 4 月 18 日,AI 社区对 Llama 3 70B 的发布表示欢迎,这是一款最先进的大型语言模型 (LLM)。该型号是 Llama 系列的下一代产品,支持广泛的用例。该模型 istelf 在广泛的行业平台上表现良好,并提供了新…

Eclipse的使用配置教程:必要设置、创建工程及可能遇到的问题(很详细,很全面,能解决90%的问题)

Eclipse的使用配置: Ⅰ、Eclipse 的必要配置:1、Eclipse 的安装:其一、将 Eclipse 解压或安装到没有中文且没有空格的路径下。其二、拿到 eclipse.exe 文件,傻瓜式安装即可; 2、设置工作空间(workspace):其一、首次启动…

源头分析: 网络安全的分布式方法

部署网络可见性和网络检测和响应 (NDR) 解决方案来收集、查看和分析网络活动,以检测网络上的可疑和恶意活动。 这些解决方案中的大多数都是为了将数据从收集点 (或传感器) 移动到中央存储库进行分析而构建的。 这种方法有几个缺点,包括规模、性能、成本…

乌龟对对碰在线版

爆肝两天使用vue开发了一个在线版的乌龟对对碰小游戏之幸运对对碰。没有找到合适的乌龟素材,现在使用小兔子代替。 体验地址:幸运对对碰 | 乌龟对对碰小游戏 之前的python版本的乌龟对对碰:写文章-CSDN博客 乌龟对对碰-幸运对对碰

无需测试环境!如何利用测试脚手架隔离微服务,实现功能自动化

以下为作者观点: 想在不建立完整测试环境的情况下测试微服务? 想在将变更推送到主线分支之前完成测试? 这是我们在进行项目交付时经常遇到的难题。最近,当我们开始一个新的项目,为客户构建一个新的聚合平台时&#…

【springboot】springboot接口参数全局解密,解决request内容修改后如何重新设置回去的问题

文章目录 核心思路spring&servelt基础核心接口类body解密核心原理讲解get解密核心原理讲解 核心思路 拦截每次请求 所以要么在拦截器 要么在过滤器中做 (正常来说 其实只能在过滤器做)修改request中的参数把修改后的参数设置回去(难点) spring&servelt基础…

RegFormer:用于大规模点云配准的高效投影感知Transformer网络

目录 一、导言 二、相关工作 1、点云配准工作 2、大规模点云配准 3、Transformer引入配准工作 三、RegFormer 1、柱面投影 2、特征提取Transformer 3、双射关联Transformer(BAT) 4、刚性变换估计 5、损失函数 四、实验 一、导言 该论文来自于ICCV2023(…

如何搞定聊天记录找回?三款数据恢复工具分享

聊天记录丢了怎么办?别急,我这就带大家看看市面上比较火的三款数据恢复软件在恢复聊天记录方面的表现如何。首先,我们得知道,聊天记录这东西,一旦误删,那可是心急如焚啊。所以,选择一款靠谱的数…

场外个股期权可以分批建仓吗?

场外个股期权的优势是可以进行风险的精细化管理,但由于期权价格变化的非线性特性,盈利与标的行情走势的相关性不断变化,场外个股期权最便宜的可以用2-5万买到100万市值的股票持仓一个月,下面是整理得出的场外个股期权可以分批建仓…

SwiftUI 6.0(iOS 18)监听滚动视图视口中子视图可见性的极简方法

概览 在 SwiftUI 的应用开发中,我们有时需要监听滚动视图中子视图当前的显示状态:它们现在是被滚动到可见视口(Viewport)?或仍然是隐藏在“未知的黑暗”中呢? 在 SwiftUI 早期版本中为了得偿所愿,我们需要借助一些“取巧”的手段。不过,从 SwiftUI 6.0(iOS 18)开始情…