那家财经网站做的好/哪个平台可以免费打广告
文章目录
- 什么是树
- 树的常见术语
- 树的表示
- 树的应用
什么是树
相信大家刚学数据结构的时候最先接触的就是顺序表,栈,队列等线性结构.
而树则是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合
非线性 体现在它是由n个有限结点(可以是零个结点)组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的
一对多 体现在比如对图中A来说,A对于和B,C都存在联系,同理B,C与其他的也均存在关系
树的常见术语
节点的度:一个节点含有的子树的个数称为该节点的度(上图A的为2)
叶节点/终端节点:度为0的节点称为叶节点(上图DEFGH节点为叶节点)
非终端节点/分支节点:度不为0的节点,(上图A,B,C)
双亲节点/父节点:若一节点含有子节点,此节点称为其子节点的父节点(上图A是B的父节点)
孩子节点或子节点:一节点含有的子树的根节点称为该节点的子节点(上图B是A的孩子节点)
兄弟节点:具有相同父节点的节点互称为兄弟节点(B、C是兄弟节点)
树的度:一棵树中,最大的节点的度称为树的度(上图B的度最大,故树的度为3)
堂兄弟节点:双亲在同一层的节点互为堂兄弟(如上图D,E互为兄弟节点)
节点的祖先:从根到该节点所经分支上的所有节点(上图A是所有节点的祖先)
子孙:以某节点为根的子树中任一节点都称为该节点的子孙(上图所有节点都是A的子孙)
森林:由n(n>0)棵互不相交的树的集合称为森林
此外,另有两个术语需要单独讨论一下,即
节点的层次:从根开始定义起,有两种说法
①根为第1层,根的子节点为第2层…
②根为第0层,根的子节点为第1层…
树的高度或深度:树中结点的最大层次
比如,只有一个节点,A是第0层,也可以说是第1层,两者都是正确的
但是我更推荐说A是第1层,因为如果A是第0层,高度或深度就为0,
那么对于空树来说,它就只能是-1层,显然不合理
那么如果A是第1层,高度或深度就为1;而空树的高度或深度就为0了,个人认为这种安排更加合理
树的表示
树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等.
首先我们来看一种比较差的表示
struct TreeNode
{int val;struct TreeNode* child1;struct TreeNode* child2;struct TreeNode* child3;//...
}; //缺点很明显,浪费空间,对于度只有1或0的节点就会浪费结构体内的空间//或者稍微改进一下
struct TreeNode
{int val;struct TreeNode* childArray[5];
}; //同理,如果没有5个孩子的节点也会浪费空间
现在介绍一种非常常用且厉害的方法: 孩子兄弟表示法
struct TreeNode
{int val;struct TreeNode* firstChild;struct TreeNode* brother;
};
此方法的思路流程如下:(链表)
再比如 双亲表示法:只存在父亲节点的指针或者下标
#define size 100//树中结点的最大数量
#define dataType int//树结构中数据类型
//节点
typedef struct TreeNode{dataType data;//树中结点的数据类型int parent;//它的父结点在数组中的位置下标
}TreeNode;
//树结构: (上面的方法没有写这个树结构是因为上面是本质是链表,而这里是数组)
typedef struct {PTNode nodes[size];//存放树中所有结点int r,nums;//根的位置下标和结点数
}Tree;
逻辑思路如下(数组)
树的应用
1.文件系统:计算机的文件系统通常采用树形结构来组织文件和目录。根节点是文件系统的根目录,每个目录可以包含子目录和文件,这种结构可以方便地组织和访问文件。
2.数据库索引:数据库中的索引通常使用B树或B+树这样的树形结构来实现。树的节点包含关键字和指向其他节点的指针,可以快速地搜索和访问数据库中的数据。
3.解析树:编译器常使用树形结构来表示程序的语法结构。每个节点代表一个语法规则或语句,子节点表示该语句的组成部分,这种结构可以方便地进行语法分析和代码生成。
注:这只是树形结构在实际中的一部分应用,它的灵活性和易于理解性使其成为许多领域中常用的数据结构。
相关文章:

【数据结构】树的基础入门
文章目录 什么是树树的常见术语树的表示树的应用 什么是树 相信大家刚学数据结构的时候最先接触的就是顺序表,栈,队列等线性结构. 而树则是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合 非线性 体现在它是由n个有限结点(可以是零个结点)组成一个具有层次关…...

【多线程】Thread的常用方法
Thread的常用方法 1.构造器 Thread提供的常见构造器说明public Thread(String name)可以为当前线程指定名称public Thread(Runnable target)封装Runnable对象成为线程对象public Thread(Runnable target,String name)封装Runnable对象成为线程对象,并指定线程名称…...

windows 下docker安装宝塔镜像 宝塔docker获取镜像
1. docker 安装宝塔 打开链接:https://www.docker.com/get-started,找对应的版本下载docker,安装docker打开百度云盘:链接:https://pan.baidu.com/s/1DGIjpKkNDAmy4roaKGLA_w 提取码:u8bi 2. 设置镜像 点…...

【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述
【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述 HBase从C50迁移到6.5.1(01)迁移概述迁移范围迁移前的准备HDFS文件检查确认HBase迁移目录确保数据落盘停止老集群HBase服务停止新集群HBase服务 HBase从C50迁移到6.5.1&a…...

ETCD集群搭建(实践可用)
概述 etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。 - 官方网址: Documentation versions | etcd 准备cfssl证书生成工具 cfssl是一个开源的证书管理工具,使用json文件生成证书. 在任意一…...

基于stm32f103rct6的呼吸灯实现
一、PWM 我们可以通过改变灯的有效电压占空比来实现呼吸灯效果。其中我们要用到PWM(脉宽调制),通过pwm我们可以来改变高电平的占空比 占空比:在一个周期中,高电平所占整个周期的百分比 具体如图: 当我们用…...

关于火绒邮件监控引起的扫描任意IP会有25和110端口反馈
之前测试过公司的外网IP,因为之前一直很注意对外映射的端口,都限制了可以访问的IP地址和端口,所以之前扫描的时候是一个端口都扫描不出来的。最近闲的无事,想着再扫描试试,结果发现居然开放了25和110端口,我…...

物联网应用中蓝牙模块怎么选?_蓝牙模块厂家
在蓝牙模块选型前期,一定要了解应用场景以及需要实现的功能(应用框图),以及功能实现过程中所能提供调用的接口(主从设备,功能),考虑模块供电,尺寸,接收灵敏度…...

Mysql远程登录报错:Host ‘192.168.137.1‘ is not allowed to connect to this MySQL server
连接失败是因为数据库没有对指定的ip的服务器地址的连接进行授权,许哦一需要先进行授权。 1. 改表 先登录登录数据库:mysql -u root -p mysql>use mysql;mysql>update user set host % where user root;mysql>FLUSH PRIVILEGES; 2.授权 …...

vue去掉循环数组中的最后一组的某个样式style/class
vue去掉循环数组中的最后一组的某个样式style/class 需求:要实现这样的排列 现状 发现,最后一个格子并没有跟下面绿色线对齐。 最后发现 是因为 每个格子都给了 margin-right:36px,影响到了最后一个格子 所以要 将最后一个格子的…...

Vue2面试题100问
Vue2面试题100问 Vue2面试题100问1.简述一下你对Vue的理解2.声明式和命令式编程概念的理解3.Vue 有哪些基本特征4.vue之防止页面加载时看到花括号解决方案有哪几种?5.Vue中v-for与v-if能否一起使用?6.vue中v-if与v-show的区别以及使用场景7.v-on可以监听…...

开机启动应用
windows 建立快捷方式 winr 输入shell:startup 将快捷方式复制进来 就可以了 如果你有ccleaner,也可以看到...

RK3588平台产测之ArmSoM-W3 DDR压力测试
1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境: …...

springboot初试elasticsearch
引入依赖 elasticsearch的依赖版本与你elasticsearch要一致 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 索引库的操作 创建索引库 impo…...

Node.js安装教程图文详解
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 下载Node.js 请下载Node.js并保存至本地,官方网址:https://nodejs.org/zh-cn/ 在此,选择windows系统64位的16.13.1版本进行下载。 下载…...

laragon 为 php 安装 Xdebug 扩展
众所周知,php 自带的 var_dump() 输出格式很不直观 而 laragon 作为很好的 windos 下开发环境很受欢迎,本文就介绍如何快速为 laragon 的 php 安装 Xdebug,方便开发调试 一:启动开发环境,在任意可访问 php 页面中输出 …...

华为云 存在不支持迁移的外键解决方法
DRS 检测出源端存在不支持的外键引用操作 MySQL、GaussDB(for MySQL)为源的全量增量或增量迁移、同步场景,以及MySQL、GaussDB(for MySQL)为源灾备场景 表1 源端存在不支持的外键引用操作 预检查项 源端存在不支持的外键引用操作。 描述 同步对象中存在包含CASC…...

Linux 中的 cd 命令及示例
cd命令在Linux 中称为更改目录命令。它用于有效地从当前工作目录移动到系统中的不同目录。 Linux 中 `cd` 命令的语法 光盘[目录] cd [directory]在这里,将 [directory] 替换为您要导航到的目标目录的路径。 “cd”命令的实际实现与示例。...

【VUE】
概念 VUE是一个用于构建用户界面的渐进式框架 构建用户界面:基于数据渲染出用户看到的界面 渐进式:声明式渲染->组件系统->客户端路由->大规模状态管理->构建工具 框架:一套完整的项目解决方案 VUE使用方式: 1.…...

详解初阶数据结构之顺序表(SeqList)——单文件文件实现SeqList的增删查改
目录 一、线性表 二、顺序表 2.1概念及结构 2.2接口实现 2.3动态顺序表的创建 2.3动态顺序表的初始化 2.3.1传值初始化 2.3.2传址初始化 2.4动态顺序表的清空 2.5动态顺序表的扩容 2.6动态顺序表内容的打印 三、动态顺序表的使用 3.1尾插尾删 3.1.1尾插 3.1.2尾删…...

JavaScript中的深拷贝和浅拷贝
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浅拷贝(Shallow Copy):⭐深拷贝(Deep Copy):⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带…...

树形结构的节点作为查询参数业务
1、业务描述 有一个树结构,存在一个唯一的code和一个父节点的pcode,要求前端传入任意层的code匹配这个code对应的所有子节点对应的数据。 2、解决思路 因为无法判定传入的code到底在那层,so 直接递归调用查询判断,如果有子节点就…...

sql:SQL优化知识点记录(十二)
(1)读锁案例讲解 加读锁和写锁 查看是否上锁:In_use:变成了1 读写锁对我们数据产生哪些影响: 读锁:是共享锁,其他线程可以查看: 加了读锁:session1不能修改自己…...

一.使用qt creator 设计显示GUI
一.安装qt creator 二.创建项目 文件-》新建项目 三.使用设计 可以直接使用鼠标拖拽 四.转换为py文件 # from123.py 为导出 py文件的文件名 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\from123.py form.ui五.显示GUI from PyQt5.QtWidgets import * fr…...

sql:SQL优化知识点记录(八)
(1)索引面试题分析 所谓索引:就是排好序的快速查找数据结构,排序家查找是索引的两个用途 select * 在where使用到了索引,当select * 有模糊查询%在左边索引会失效 当select * where后面索引的顺序发生变化࿰…...

java笔试题,寻找多出来的元素
题目:有两个数组a和b,其中b有一个元素是a没有的,其他元素都相同,请找出b中这个多余的元素。 1 public class Test02 { 2 3 public static void main(String[] args) { 4 int[] a {11, 34, 9, -4, 100, 98}; 5 int[] b {34…...

docker笔记3 Docker常规安装
1.安装tomcat docker hub上面查找tomcat镜像 docker search tomcat 从docker hub上拉取tomcat镜像到本地 docker pull tomcat docker images查看是否有拉取到的tomcat 使用tomcat镜像创建容器实例(也叫运行镜像) docker run -it -p 8080:8080 tomcat -p 小写,主…...

阻止 NTLM后无法登录远程桌面的原因
阻止 NTLM(NT LAN Manager) 攻击设置二 之前郑州景安的服务器被攻击,没过几天阿里云的也被攻击,且都是 NTLM 攻击。 Operating System: Windows Server 2008(R2) Enterprise Service Pack 1 64bit 一、winr 输入 gpedit.msc 二、依次进入:…...

Docker网络功能
基本网络功能 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。使用docker network子命令来管理Docker网络。 外部访问容器可通过端口映射实现,启动容器时使用-p参数指定映射关系。-p可多次使用来绑定多个端口。使用docker port命令查看当前映射的端…...

如何入门 AI----如何确定学习目标
当确定学习人工智能(AI)的目标时,可以考虑以下具体的步骤: 兴趣和好奇心: 首先,问问自己,您对哪些 AI 领域感兴趣?是机器学习、自然语言处理、计算机视觉,还是其他领域&a…...