当前位置: 首页 > news >正文

【数据结构入门】树

目录

1.树的概念

父子结点

根节点|叶节点

结点的度

叶子结点或终端结点

兄弟结点

树的度

结点的层次

树的高度或深度

结点的祖先

堂兄弟结点

子孙

森林

2. 树的结构定义

2.1 左孩子右兄弟结构

2.2 数组表示法

3.树&非树


1.树的概念

        树是一种非线性的数据结构,它是由N(N>=0)个有限节点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树。也就是说它是根朝上,叶朝下的。

我们发现树是有一个一个节点构成的,如果一个节点都没有,我们称作“空树”。

父子结点

        通常由一个结点延伸出来的直接结点称作该结点的子结点;例如下图中:1号结点是2号结点的父结点,2号结点是1号结点的子结点。

根节点|叶节点

        没有父结点的结点称为根结点;

        没有子结点的结点称为叶结点。

结点的度

一个结点含有的子树的个数称为该结点的度,上图A的度为6;

叶子结点或终端结点

度为0的节点称为叶结点,上图BCHIPQKLMN,都是叶结点。

兄弟结点

拥有相同的父结点的结点称为兄弟结点,例如KLM是兄弟结点。

树的度

最大结点的度称为树的度,上图中树的度是6

结点的层次

从根开始,根为第一层,根的子结点称为第2层,以此类推。

树的高度或深度

树中结点层次最大的。如上图树的高度为4;

结点的祖先

从根到该结点经过的所有结点,如上图A是所有结点的祖先,P的祖先是AEJ;

堂兄弟结点

双亲在同一层的结点互为堂兄弟结点,例如HI是堂兄弟结点。

子孙

以某节点为根的子树都叫做该结点的子孙。

森林

由M(M>0)棵互不相交的树的集合称为森林。

2. 树的结构定义

        当已知数的度是多少的情况下可以定义树的结构:

#define _CRT_SECURE_NO_WARNINGS
#define N 3 // 假设度为3
typedef struct TreeNode 
{int val;struct TreeNode* child1[N];
}TreeNode;

        在windows文件资源管理器中,其实就是一棵树,盘符是根结点,但是这棵树没有规定究竟有多少个子节点,也就是说这里没有提前定义这棵树的度。上面那种定义会存在一定程度上的内存浪费。

        我们可以使用顺序表来存,顺序表的每一个元素都是一个结点的指针,这种定义的方式显然也不够好,在底层也会有一定程度的空间浪费。

typedef struct TreeNode 
{int val;TreeNodeSeqList childs;
}TreeNo

2.1 左孩子右兄弟结构

        在树中有一种非常清晰明了的结构,结构体中存有两个指针,一个指针指向左边第一个孩子,第二个指针指向它的兄弟(亲兄弟)。

typedef struct TreeNode 
{int val;TreeNode LeftChild;TreeNode RightBrother;
}TreeNode;

如图:

我们使用左孩子右兄弟的表示方法表示上面的树:

通过访问根结点的左边第一个孩子,再通过访问它的右兄弟就能将A节点的所有孩子全部访问。

2.2 数组表示法

定义两个数组,第一个数组是存放所有的结点;

第二个数组根据每一个结点存放对应的父结点的下标。

例如A没有父结点,存-1;

B、C的父结点是A,存A的下标0......

3.树&非树

①子树是不相交的。

②每一个结点有且只有一个父结点。

③N个节点有N-1条边。

只需要看树是否构成回路

http://www.lryc.cn/news/617196.html

相关文章:

  • 2025世界机器人大会|具身智能机器人十大发展趋势
  • 人脸识别系统技术文档
  • C9800 ISSU升级
  • Netty使用CA证书实现tls双认证
  • Linux ethernet驱动移植之常见问题
  • html转成markdown(1.0.0)
  • Mybatis学习之缓存(九)
  • 文件编辑html
  • 通用 maven 私服 settings.xml 多源配置文件(多个仓库优先级配置)
  • Django配置sqllite之外的数据库
  • 爬虫与数据分析结合案例学习总结
  • Apache Ignite 核心组件:GridClosureProcessor解析
  • pom.xml父子模块配置
  • 【Maven】01 - 入门篇
  • Maven 的 module 管理
  • 基于Spring Data Elasticsearch的分布式全文检索与集群性能优化实践指南
  • Maven 报错:Blocked mirror for repositories【完美解决】
  • 直接编辑pdf文件教程
  • SpringBoot 自动配置核心机制(面试高频考点)
  • wpf问题记录
  • 【2025最新版】PDF24 Creator,PDF编辑,合并分割,格式转换全能工具箱,本地离线版本,完全免费!
  • 【Maven】02 - 进阶篇
  • 《深度剖析前端框架中错误边界:异常处理的基石与进阶》
  • 华为虚拟防火墙配置案例详解
  • 基于SpringBoot+Uniapp的血压监控小程序(Echarts图形化分析)
  • 华为watch5心率变异性测量法的底层逻辑
  • Django ORM查询技巧全解析
  • 41.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成Swagger
  • Spring MVC 注解参数接收详解:@RequestBody、@PathVariable 等区别与使用场景
  • kafka 中的Broker 是什么?它在集群中起什么作用?