05-5.4.1 树的存储结构
👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com
喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑💻
感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏
树的逻辑结构回顾
[[5.1.1~2 树的定义和基本术语]]
[[5.2.2 二叉树的存储结构]]
如何实现树的顺序存储?
树:一个分支结点可以有多课子树
只依靠数组下标,无法反映结点之间的逻辑关系
思路:
用数组存顺序存储各个结点。每个结点中保存 数据元素、指向双亲结点(父结点)的“指针”
双亲表示法(顺序存储)
![![[Pasted image 20240617204710.png]]](https://img-blog.csdnimg.cn/direct/5e42e2677a0d4bec89f49dd0188f1c5f.png)
![![[Pasted image 20240617204517.png]]](https://img-blog.csdnimg.cn/direct/3692e236282f4e1a9283f4f5183ca298.png)
#define MAX_TREE_SIZE 100 // 树中最多结点数typedef struct{ // 树的结点定义ElemType data; // 数据元素int parent; // 双亲位置域
}PTNode;typedef struct{ // 树的类型定义PTNode nodes[MAX_TREE_SIZE]; // 双亲表示int n; // 结点数
}PTree;
拓展:双亲表示法存储“森林”
森林是 m ( m ≥ 0 ) m(m \geq 0) m(m≥0) 棵互不相交的树的集合
![![[Pasted image 20240617204640.png]]](https://img-blog.csdnimg.cn/direct/cac61871f3844c55a9ae1b73f8ded19a.png)
双亲表示法的优缺点
- 优点:找双亲(父结点)很方便
- 缺点:找孩子不方便,只能从头到尾遍历整个数组
- 适用场景:“找父亲”多,“找孩子”少。如:并查集
孩子表示法(顺序+链式存储)
![![[Pasted image 20240617204926.png]]](https://img-blog.csdnimg.cn/direct/44a651a652884d07a2d2617f202504fb.png)
孩子表示法:用数组顺序存储各个结点。每个结点中保存 数据元素、孩子链表头指针
// 链表结点中只需要保存孩子的编号以及指向下一个链表结点的指针
struct CTNode{int child; // 孩子结点在数组中的位置struct CTNode *next; // 下一个孩子
};// 一个数组元素中包含数据元素data和一个链表的指针firstChild
typedef struct{ElemType data;struct CTNode *firstChild; // 第一个孩子
} CTBox;// 用上面声明的结构体定义一个数组,在数组中存储结点的信息,同时还要记录这棵树中总共有多少个结点,以及根结点的下标是多少
typedef struct{CTBox nodes[MAX_TREE_SIZE];int n, r; // 结点数和根的位置
} CTree;
用孩子表示法存储“森林”

用孩子表示法存储“森林”
需要记录多个根的位置
孩子表示法的优缺点
- 优点:找孩子很方便
- 缺点:找双亲结点很不方便
- 适用场景:“找孩子”多,“找父亲”少。如:服务流程树
孩子兄弟表示法(链式存储)
typedef struct CSNode{ElemType data; // 数据域struct CSNode *firstChild. *nextsibling; // 第一个孩子和右兄弟指针
} CSNode, *CSTree;
与二叉树类似,采用 二叉链表 实现,每个结点中包含 数据元素 和 两个指针,但这两个指针的含义与二叉树不同
孩子兄弟表示法存储“森林”
![![[Pasted image 20240617210552.png]]](https://img-blog.csdnimg.cn/direct/d02c90bff2f946ba96cbef9b6493b164.png)
![![[Pasted image 20240617210626.png]]](https://img-blog.csdnimg.cn/direct/6a8e7452da374703bdd040db4cc951bd.png)
相关文章:
05-5.4.1 树的存储结构
👋 Hi, I’m Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…...
Spring事务管理与Spring AOP详解
Spring事务管理与Spring AOP详解 一、引言 在企业级应用开发中,事务管理和面向切面编程(AOP)是两个至关重要的概念。Spring框架作为Java企业级应用的首选框架之一,为事务管理和AOP提供了强大的支持。本文将详细解析Spring的事务…...
LaTeX 的使用
文章目录 TeX 编辑器文档类型中文编译文档结构preamble 导言区(不能放正文内容)document body 正文区 正文内容目录段落列表无序列表有序列表 图片表格交叉引用段落图片表格 转义符 数学公式数学符号行内公式行间公式有公式计数器无公式计数器 公式包含文…...
Text2SQL之Vanna优化
文章目录 前言一、优化方向二、干就完了一次性生成多个Question-SQL对先生成一个问题,再根据DDL和业务数据生成SQL总结前言 前阵子写了篇Text2SQL的简单介绍,发现其也是RAG只会,写下了Text2SQL之不装了,我也是RAG 最近也一直在做Text2SQL的优化,于是把自己的一些心得,总…...
船舶行业信息安全解决方案介绍
船舶行业信息安全背景: 近年来随着经济复苏、疫情与国际形势影响国内外船舶海运业务蓬勃发展,在业务量激增的背景下出现多类信息安全事件。其中2017年,马士基集团遭到勒索软件攻击,内部业务系统和码头操作系统均受到严重影响&…...
Typora—适用于 Mac 和 Win 系统的优秀 Markdown 文本编辑器
Typora 是一款适用于 Mac 和 Win 系统的优秀 Markdown 文本编辑器,它以其简洁易用的界面和强大的功能受到了众多用户的喜爱。 首先,Typora 的界面设计非常简洁直观,没有过多繁杂的菜单和按钮,让用户能够专注于写作本身。它采用实时…...
产品经理的未来在哪里?
【同学聚会】 医生说:你生病的话可以找我。 老师说:你孩子成绩不好时找你辅导。 律师说:你遇上官司时我帮你。 程序员说:你电脑坏了时我帮你修理。 产品经理说:我……好像无一技之长。(瞬间开始怀疑人…...
火车头采集怎么使用GPT等AI原创文章
火车头采集官方并没有GPT、百度文心一言AI、阿里通义千问AI、Kimi大模型等AI功能,但支持接入插件,可以编写相应人工智能AI原创文章插件(火车头采集支持PHP和c#这2种语言的插件编写),或者导入第三方封装好的GPT等AI原创…...
多元多项式的特征列与零点的关系定理
下面这个定理来自《计算机代数》6.1三角列与特征列(王东明、夏壁灿著) 【定理】 设 C [ C 1 , … , C r ] \mathbb{C }\left\lbrack C_{1},\ldots,C_{r} \right\rbrack C[C1,…,Cr]为多项式组 P ⊂ K [ x ] \mathbb{P \subset}\mathcal{K\lbrack}\…...
git - LFS 使用方法
安装Git LFS 访问 Git LFS官网 下载适用于您操作系统的版本。 Linux用户,解压缩下载的.tar.gz文件,并通过终端运行安装脚本。 tar -xvf git-lfs-linux-amd64-vX.Y.Z.tar.gz cd git-lfs-X.Y.Z sudo ./install.sh 初始化Git LFS # 全局启用 git lfs i…...
提高磁盘可靠性的技术:保障数据安全的四大方法
目录 1. 第一级容错技术 磁盘镜像(Mirroring) 工作原理 RAID 1 工作原理 优点 缺点 适用场景 示例 2. 第二级容错技术 概述 RAID 5 RAID 6 优点 缺点 适用场景 3. 基于集群系统的容错技术 概述 Hadoop HDFS Ceph 优点 缺点 适用场…...
CesiumJS【Basic】- #006 浏览器控制台查看位置角度
文章目录 浏览器控制台查看位置角度1 目标 浏览器控制台查看位置角度 1 目标 浏览器控制台查看位置角度...
Mac 终端报错 zsh: command not found: brew 解决方案
Homebrew安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装成功后,在终端输入下面命令 brew -v如果成功输出brew版本,则安装成功 关闭终端重新打开终端,报错zsh: comm…...
详解 HBase 的常用 API
一、环境准备 创建一个 Maven 工程并引入依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.3.1</version> </dependency> <dependency><groupId>org.apach…...
JSR303校验
校验的需求 前端请求后端接口传输参数,需要校验参数。 在controller中需要校验参数的合法性,包括:必填项校验、数据格式校验等在service中需要校验业务规则,比如:课程已经审核过了,所以提交失败。 servi…...
04 远程访问及控制
1、SSH远程管理 SSH是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。 SSH协议对通信双方的数据传输进行了加密处理(包括用户登陆时输入得用户口令)。 终端:接收用户的指令 TTY终端不能远程,它…...
[晕事]今天做了件晕事38 shell里的source 点号
今天碰到一个问题脚本里使用点号引入某个文件形式如下: . /tmp/abc但是脚本运行出现错误,一开始还以为是/tmp没有可执行权限(https://mzhan017.blog.csdn.net/article/details/112178736#t16),导致abc运行不了。 后来…...
java如何分割字符串
java要实现对字符串的分割,需要用到split语句 语法格式是 str.split(分隔符) 其中 str是字符串 示例代码如下 public class Stringsplit {public static void main(String[] args) {String a"蒸羊羔,蒸熊掌,蒸鹿尾,烧花…...
胡说八道(24.6.12)——数字电子技术以及Modelsim
上回书说到数电中的最常用的表达式——逻辑表达式(由布尔代数组成)以及常用的两种图表——真值表(真值表表示的是所有的输入可能的线性组合以及输出)和卡诺图(卡诺图则是一种化简工具,排除冗余项,合并可合并项)。 今天,先来看看昨天说的基本逻…...
【Android面试八股文】AsyncTask中的任务是串行的还是并行的
文章目录 串行执行并行执行示例代码串行执行(默认)并行执行总结AsyncTask 的任务执行方式可以是串行的,也可以是并行的,这取决于使用的执行器 ( Executor)。 串行执行 默认情况下,AsyncTask 使用的是 SERIAL_EXECUTOR,即任务按顺序一个接一个地执行。这意味着下一个任务…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
[拓扑优化] 1.概述
常见的拓扑优化方法有:均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有:有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时ÿ…...
