树结构的基本概念和理解
1.树的有关基本概念
定义
树(Tree)是n(n=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
树结构是一对多的结构
相关概念见图。
线性结构 | 树结构 |
---|---|
第一个数据:无前驱 | 根结点:无双亲,唯一 |
最后一个原始:无后继 | 叶结点:无孩子,可以多个 |
中间元素:有一个前驱,一个后继 | 内部结点:一个双亲,可以有多个孩子 |
2 树的抽象数据类型定义
ADT Tree {
数据对象 D: D 是具有相同特性的数据元素的集合。
数据关系 R:(略)
基本操作 P:
{结构初始化}
InitTree (&T );
操作结果:构造空树 T。
CreateTree (&T, definition);
初始条件: definition 给出树 T 的定义。
操作结果:按 definition 构造树 T。
{销毁结构}
DestroyTree (&T );
初始条件:树 T 存在。
操作结果:销毁树 T。
{引用型操作}
TreeEmpty (T)
初始条件:树 T 存在。
操作结果:若 T 为空树,则返回 TURE,否则 FALSE。
TreeDepth (T)
初始条件:树 T 存在。
操作结果:返回 T 的深度。
Root (T)
初始条件:树 T 存在。
操作结果:返回 T 的根。
Value (T, cur_e);
初始条件:树 T 存在, cur_e 是 T 中某个结点。
操作结果:返回 cur_e 的值。
Assign (T, cur_e, value)
初始条件:树 T 存在, cur_e 是 T 中某个结点。
操作结果:结点 cur_e 赋值为 value。
Parent (T, cur_e)
初始条件:树 T 存在, cur_e 是 T 中某个结点。
操作结果:若 cur_e 是 T 的非根结点,则返回它的双
亲,否则函数值为“空”。
LeftChild (T, cur_e)
初始条件:树 T 存在, cur_e 是 T 中某个结点。
操作结果:若 cur_e 是 T 的非叶子结点,则返回它的
最左孩子,否则返回“空”。
RightSibling (T, cur_e)
初始条件:树 T 存在, cur_e 是 T 中某个结点。
操作结果:若 cur_e 有右兄弟,则返回它的右兄弟,
否则函数值为“空”。
TraverseTree (T, Visit() )
初始条件:树 T 存在,Visit 是对结点操作的函数。
操作结果:按某种次序对 T 的每个结点调用函数
Visit () 一次且至多一次。一旦 Visit ()
失败,则操作失败。
{加工型操作}
ClearTree (&T );
初始条件:树 T 存在。
操作结果:将树 T 清为空树。
InsertChild (&T, &p, i, c);
初始条件:树 T 存在,p 指向 T 中某个结点,1≤i≤p
所指结点的度 + 1,非空树 c 与 T 不相交。
操作结果:插入 c 为 T 中 p 指结点的第 i棵子树。
DeleteChild (&T, &p, i);
初始条件:树 T 存在,p 指向 T 中某个结点,
1≤i≤p 所指结点的度。
操作结果:删除 T 中 p 所指结点的第 i 棵子树。
}ADT Tree
3.树结构的存储形式
下面介绍 多重链表存储形式
#define MaxChild 10
#define Elemtype int
typedef struct treeNode{Elemtype data;struct treeNode *child[MaxChild] ;
}treeNode;
返回目录
树结构的基本概念和理解相关推荐
- Spring Security 实战干货: RBAC权限控制概念的理解
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...
- 架构漫谈(二):认识概念是理解架构的基础
原文:架构漫谈(二):认识概念是理解架构的基础 架 构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构.怎样做好架构.软件架构如何落地.如 何 ...
- BlockChain:区块链技术基础概念综合理解——个人总结
BlockChain:区块链技术基础概念综合理解--个人总结 目录 区块链的进阶与意义 1.区块链技术的进阶 2.区块链技术三大意义-传递价值.建立可信用环境.提高效率和降低成本 1.传递价值 2.建 ...
- 从进程组、会话、终端的概念深入理解守护进程
从进程组.会话.终端的概念深入理解守护进程 一.写在前面 「守护进程」是 Linux 的一种长期运行的后台服务进程,也有人称它为「精灵进程」.我们常见的 httpd.named.sshd 等服务都是以 ...
- pytorch 中维度(Dimension)概念的理解
pytorch 中维度(Dimension)概念的理解 Dimension为0(即维度为0时) 维度为0时,即tensor(张量)为标量.例如:神经网络中损失函数的值即为标量. 接下来我们创建一个di ...
- MVC与模板概念的理解
MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一 ...
- (图形学相关数学知识)-2.对基本概念的理解(一)
总览 总结一些在图形学中经常用到的线性代数基本概念. 主要涉及: 标量, 向量, 位置, 方向, 坐标, 矩阵, 线性变换, 线性相关, 平移, 旋转, 缩放, 仿射变换, 齐次坐标等. 标量(数字) ...
- 开环与闭环概念的理解
开环与闭环概念的理解 开环与闭环是自动控制原理里面的概念,在电路设计里面也经常用到,像是运放电路,时钟电路,开关电源电路等.用是用到了,但是真的要你针对这两个概念讲出个ABCD时就.... 1 开环系 ...
- 数学是一门逻辑性极强的演绎科学,只有对基本概念深入理解,对基本定理和公式牢牢记住,才能找到解题的突破口和切入点。
考研数学备考目前已进入首轮复习阶段.此阶段考生要做的是全面整理基本概念.定理.公式,初步总结复习重点,把握命题基本题型,为强化期的复习打下坚实基础. 由于数学大纲一般变化不大,因此,虽然2003年考试 ...
最新文章
- 查看网站上保存的密码
- ie8不兼容java项目_[Java教程]ie8以下不兼容document.getElementsByName解决方法
- Android 计算布局背景的透明度
- Java培训教程之使用Lock取代synchronized
- WSAAccept()函数使用解析
- Linux桌面环境GNOME实用技巧
- lodash 数组裁剪 drop
- 基于Java毕业设计智慧后勤系统源码+系统+mysql+lw文档+部署软件
- nfc加密卡pm3和pm5区别_【黑科技】NFC模拟门卡门禁
- Unity用代码将多张图片合并为一张图片
- blk_rq_map_user和blk_rq_map_kern
- chrome 打开网页速度很慢的可能原因
- wox开机自启_Wox具有一切支持的Windows启动器
- 五面阿里拿下飞猪事业部offer,统统给你解决!
- springCloud Alibaba seata 分布式事务
- CS 144 计算机网络
- 他为何放弃工程局工作,也要转行学python,还拿下17.5K的offer
- 如何加载 那个大图片
- ERP期末复习知识点
- c语言米粒数实验报告,数字图像处理实验报告米粒.doc
热门文章
- 全国降雨侵蚀力因子R值计算教程
- docker学习:docker部署dolphinscheduler1.3.9伪分布式集群
- uni-app H5下载到本地照片
- 整理收集46个常用区块链术语,菜鸟必看!
- 一根绳子从一头烧需30时分钟_如何用两根燃烧的绳子测量出45分钟时间?
- 反向输出dna序列_biopython 处理dna序列,翻译,反向互补。
- ctf 选择题 题库_计算机考试试题(精选)ctf
- NSLog 打印技巧
- 数据库系统概论学习笔记
- 软路由系统 --- OpenWrt网络配置(LAN口、WAN口)