当前位置: 首页 > 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.dtcms.com/a/326302.html

相关文章:

  • 基于Go-Zero框架实现的小demo
  • 爬虫和数据分析相结合案例
  • 软件开发:一场精密的生命构建
  • 疯狂星期四文案网第36天运营日记
  • jsdiff + diff2html【jQuery】实现文件对比功能
  • Linux DNS服务解析原理与搭建
  • ResponseBodyAdvice是什么?
  • 基于动态顺序表实现【通讯录系统】:有文件操作部分哦!
  • Oracle主从incarnation不一致问题解决
  • ComfyUI安装
  • 【96页PPT】华为IPD流程管理详细版(附下载方式)
  • 强化学习常用数据集
  • HBase BlockCache:LRU Cache
  • Qt界面优化
  • TD-IDF的一些应用
  • 降压型DCDC电源芯片推荐-芯伯乐XBL4001 40V/5A
  • Python3.10 + Firecrawl 下载 Markdown 文档:构建高效通用文章爬虫
  • 深度学习 --- 迁移学习以及onnx推理
  • 自建Web应用防火墙(WAF)
  • 前端面试:promise...then与asnyc ...await
  • 华为Atlas 200 DK 板卡使用技巧记录(一)修改板卡IP
  • Pytest项目_day12(yield、fixture的优先顺序)
  • CobaltStrike钓鱼鱼饵制作的方式(chm、doc、execl、exe、powshell 上线cs)
  • [特殊字符] OpenCV图像预处理与ResNet-50深度学习分类实战
  • 元数据管理与数据治理平台:Apache Atlas 关系搜索 Relationship Search
  • AI产品经理手册(Ch12-16)AI Product Manager‘s Handbook学习笔记
  • 使用纯NumPy实现回归任务:深入理解机器学习本质
  • C++安装使用eigen库时出现warning C4819问题的解决方案
  • 【网络运维】Linux:LNMP 项目实践
  • NodeJs》》url地址参数 解析 URLSearchParams querystring