搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
天景科技苑
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Java中eq、ne、ge、gt、le、lt的含义_java gt
2
Java后端工程师必备书单(含大后端方向相关书籍)_后端工作岗位上看教材的人_java开发工程师书籍
3
谈谈开源的利弊和国内的开源 ——《新程序员005:开源深度指南 & 新金融背后的科技力量》书评_开源模型的好处与坏处
4
算法:京东广告算法架构体系建设--在线模型系统分布式异构计算演变_京东大模型层次架构从大模型平台和maas的角度画一个大小模型相互(太极阴阳)交互演
5
网络安全常见中间件(mysql,redis,tomcat,nginx,apache,php)安全加固_中间件加固
6
oracle数据库的白名单和黑名单设置_oracle 白名单
7
计算机毕业设计--基于深度学习技术(Transformer、GAN)的图像修复算法(含Github代码+GUI+Web端在线体验界面)_计算机专业本科毕业设计深度学习
8
超越99%动画!我测试了Luma AI视频的首尾帧,流畅度NO.1?_lumaai
9
AI人工智能 浙大 | KnowPAT:针对垂直领域问答的大模型知识偏好对齐与应用
10
「基于动态规划的路径与速度规划——以Apollo的DP算法为参考并附带CPP代码实现」_apollodp搜索
当前位置:
article
> 正文
数据结构:树(基本概念)_数据结构树的定义
作者:天景科技苑 | 2024-07-22 23:16:40
赞
踩
数据结构树的定义
树
集合中的元素关系呈现出一对多的情况(非线性结构,1:n)
1 树的定义
树(Tree)是n(n≥0)个节点的有限集合T,它满足两个条件 :
有且仅有一个特定的称为根(Root)的节点
其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一棵树,并称为其根的子树(Subtree)。
树的定义具有
递归性
,即“
树中还有树
”。
2 树的概念
结点:
使⽤树结构存储的每一个数据元素都被称为“结点”。例如图中的A就是一个结点。
根结点:
有一个特殊的结点,这个结点没有前驱,我们将这种结点称之为根结点。
父结点(双亲结点)、子结点和兄弟结点:
对于ABCD四个结点来说,A就是BCD的⽗结点,也称之为双亲结点。 ⽽BCD都是A的子结点,也称之为孩子结点。对于BCD来说,因为他们都有同一个爹,所以它们互相称之为兄弟结点。
度(degree):
结点的度:这个结点的分叉数量
度为0的结点:叶子结点
树的度:这颗树中,所有结点的度的最大值
深度/高度(height):
结点的深度/高度:根结点在第一层,根的孩子在第二层,依次类推。
树的深度/高度:这棵树中,结点的高度的最大值
小练习
结点A的度:3 结点B的度:2 结点M的度:0
结点A的孩子:B C D 结点B的孩子:E F
树的度:3 树的深度:4
叶子结点:K L F G M I J
结点A是结点F的祖先
结点F是结点K的叔叔结点
3 树的存储结构
树是怎么存储的?
元素:A B C D E F....
元素关系:<A,B> <A,C> <A,D>
如何存储关系?
我们有三种表示方法
3.1 双亲表示法
双亲表示法采⽤顺序表(也就是数组)存储普通树,其实现的核心思想是:顺序存储各个节点的同时,给各节点附加一个记录其⽗节点位置的变量。
利⽤顺序表存储,表元素由数据和⽗结点构成
根节点没有⽗节点(⽗节点又称为双亲节点),因此根节点记录⽗节点位置的变量通常置为 -1。
特点:
根结点没有双亲,所以位置域设置为-1
知道一个结点,找他的⽗结点,非常容易,O(1)级
找孩子结点,必须遍历整个表(找孩子难,找兄弟结点也难)
3.2 孩子表示法
孩子表示法存储普通树采⽤的是 "顺序表+链表" 的组合结构。
其存储过程是:从树的根结点开始,使⽤顺序表依次存储树中各个结点。需要注意,与双亲表示法不同的是,孩子表示法会给各个结点配备一个链表,⽤于存储各结点的孩子结点位于顺序表中的位置。
如果结点没有孩子结点(叶子结点),则该结点的链表为空链表。
使⽤孩子表示法存储的树结构,正好和双亲表示法相反,查找孩子结点的效率很⾼,⽽不擅长做查找⽗结点的操作。
我们还可以将双亲表示法和孩子表示法合二为一:
3.3 孩子兄弟表示法
在树结构中,同一层的节点互为兄弟节点。例如普通树中,节点 A、B 和 C 互为兄弟节点,⽽节点 D、E 和 F 也互为兄弟节点。
所谓孩子兄弟表示法,指的是⽤将整棵树⽤二叉链表存储起来,具体实现方案是:从树的根节点开始,依次存储各个结点的孩子结点和兄弟结点。
在二叉链表中,各个结点包含三部分内容:
在以孩子兄弟表示法构建的二叉链表中,如果要查找结点 x 的所有孩子,则只要根据该结点的 firstchild 指针找到它的第一个孩子,然后沿着孩子结点的 nextsibling 指针不断地找它的兄弟结点,就可以找到结点 x 的所有孩子。
特点:找孩子和兄弟好找,父结点不好找。
声明:
本文内容由网友自发贡献,转载请注明出处:
【wpsshop】
推荐阅读
article
【
数据结构
】
二叉树
---
C
语言
版_
二叉树
数据结构
c
语言
...
树是一种非线性的
数据结构
,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树,是因为它看起来像一棵倒挂...
赞
踩
article
二叉
树链式
结构
-
c
语言实现_自考 数据
结构
前序
遍历
二叉
链表 工作栈存储右子树
c
语言 算法...
绝对的高质量,带你秒解多项递归(
二叉
树)_自考 数据
结构
前序
遍历
二叉
链表 工作栈存储右子树
c
语言 算法自考 数据
结构
...
赞
踩
article
数据结构
--
二叉树
--
C
语言
_
数据结构
二叉树
c
语言
...
典型的存储方式就两种,要么是顺序存储(利用数组这种机制),要么是链式存储(利用链表这种机制)。基于
二叉树
区别于其他树的结...
赞
踩
article
【
m>数据结构
m>】
m>KMP
m>
m>算法
m>_k
m
p长为
m
的
m>主串
m>最坏情况下对比次数...
设定
m>主串
m>的长度为n,字串的的长度为
m
。传统的暴力字符串匹配
m>算法
m>理论上最多需要花费O(n
m
)的时间复杂度才能完成串的匹配操...
赞
踩
article
【
数据结构
】
---
单链
表
实现...
链
表
和顺序
表
都是线性
表
的一种,但是顺序
表
在物理结构和逻辑结构上都是连续的,但链
表
在逻辑结构上是连续的,而在物理结构上不一...
赞
踩
article
【
数据结构
】
二叉树
-
1
...
现实中我们通常把堆(一种
二叉树
)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,...
赞
踩
article
数据
结构——
排序
_请用
程序实现
1
、
3
、5、7、4、6、2、9、8这组
数据
的
排序
...
对
数据
的
排序
有各种各样的方法,来展示下面几种(下面都是按照升序来排的)先给出要
排序
的
数据
int arr[] = {5, ...
赞
踩
article
数据结构
-十大
排序
算法
集合
(
四万
字
精讲
集合
)...
冒泡
排序
具备很强的教学意义,但是没有什么实践意义,这里作为第一个讲解的
排序
,目的是从简单开始讲解,方便理解直接选择
排序
也...
赞
踩
article
数据结构
:
数组
与
链表
_
数组
和
链表
...
数据结构
中的
数组
和
链表
在实际应用中有不同的优缺点。
数组
具有随机访问元素
和
快速查找的优势,但插入
和
删除元素较慢。
链表
则可以...
赞
踩
article
【
面试题
】
数据结构
:堆
排序
的
排序
思想?...
堆
排序
是一种高效
的
排序
算法,其基本思想是利用堆这种
数据结构
来实现
排序
。堆是一种特殊
的
完全二叉树,通常用数组来表示。【面试...
赞
踩
article
【
数据结构
】八大
排序
算法
详细实现
--
强烈推荐
_
selecting
排序
...
我们都知道,
排序
算法
是编程高级语言里面极其重要的
算法
,虽然在C语言中,我们
排序
可以直接使用库函数qsort()函数,在C...
赞
踩
article
BUAA
20
22级“
数据结构
”
期末考试
_一
个
完全二叉树第六层叶子节点
20
个
,该树最多...
BUAA
20
22级
数据结构
期末考试
_一
个
完全二叉树第六层叶子节点
20
个
,该树最多一
个
完全二叉树第六层叶子节点
20
个
,该树...
赞
踩
article
数据结构
-
顺序
表
(2)
_
seqlist
.
h
...
顺序
表
详解
_
seqlist
.
h
seqlist
.
h
目录 1. 线性
表
2.
顺序
表
2....
赞
踩
article
Flink
基础篇,
基本概念
、
设计
理念
、
架构
模型
、
编程模型
、
常用
算子
...
1
、
什么是
Flink
?简单描述下2
、
解释下其中的 数据流
、
流批一体
、
容错能力等概念?3
、
Flink
和 Spark St...
赞
踩
article
【
数据结构
】手写
快速
排序
...
什么是
快速
排序
?首先确立pivot,比如下图位于末尾然后i遍历3到6在3的时候,j指向i前面一位如果3【
数据结构
】手写快...
赞
踩
article
数据结构
(
5.1
)——
树
的
性质...
1%29%5D。
数据结构
(
5.1
)——
树
的
性质 结点数=总度数+1 结点
的
度——结点有几...
赞
踩
article
【
Java
--
数据结构
】
栈
的应用...
如有错误,欢迎指出~【
Java
--
数据结构
】
栈
的应用 欢迎关注个人主页:逸狼 创造...
赞
踩
article
数据结构
:找出
链表
确定值
最大
的
节点
_
本题
要
求
求
出单
链表
值
最大
的
结点并返回。
要
求
实现两个函数。...
#include
using namespace std;typedef struct LNode{ ...
赞
踩
article
【
数据结构
】CH5
递归
_设计两个
递归
算法
,
maxnode
(
l
inknode
*
l
)返回单链表
l
中的...
递归
简要介绍_设计两个
递归
算法
,
maxnode
(
l
inknode
*
l
)返回单链表
l
中的最大结点值
,
minnode
(
l
i...
赞
踩
article
java
递归
单链
表
查找
中间元素_【
数据结构
】C语言
递归
实现
查找
单链
表
最值,平均值,元素个数......
【背景】已知f为
单链
表
的
表
头指针,链
表
中存储的是整形数据,试写出实现下列运算的
递归
算法:1、求链
表
中的最大整数2、求链
表
...
赞
踩
相关标签
数据结构
c语言
开发语言
算法
二叉树
排序算法
链表
c++
学习
娱乐