数据结构--树(笔记)

文章目录

  • [1. 含义及术语](#1. 含义及术语)
  • [2. 应用](#2. 应用)
  • [3. 常见二叉树种类](#3. 常见二叉树种类)
  • [4. 二叉搜索树CRUD时间复杂度O(logn)](#4. 二叉搜索树CRUD时间复杂度O(logn))
  • [5. 其它常见树](#5. 其它常见树)
  • [6. 面试](#6. 面试)
  • [7. 内容出处](#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. 内容出处

数据结构

相关推荐
北域码匠16 小时前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
LinXunFeng4 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
Darling噜啦啦7 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠8 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾9 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
闪闪发亮的小星星9 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq9 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
Qres8219 天前
算法复键——树状数组
数据结构·算法
阿米亚波9 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
自传.9 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding