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;

返回目录

树结构的基本概念和理解相关推荐

  1. Spring Security 实战干货: RBAC权限控制概念的理解

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...

  2. 架构漫谈(二):认识概念是理解架构的基础

    原文:架构漫谈(二):认识概念是理解架构的基础 架 构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构.怎样做好架构.软件架构如何落地.如 何 ...

  3. BlockChain:区块链技术基础概念综合理解——个人总结

    BlockChain:区块链技术基础概念综合理解--个人总结 目录 区块链的进阶与意义 1.区块链技术的进阶 2.区块链技术三大意义-传递价值.建立可信用环境.提高效率和降低成本 1.传递价值 2.建 ...

  4. 从进程组、会话、终端的概念深入理解守护进程

    从进程组.会话.终端的概念深入理解守护进程 一.写在前面 「守护进程」是 Linux 的一种长期运行的后台服务进程,也有人称它为「精灵进程」.我们常见的 httpd.named.sshd 等服务都是以 ...

  5. pytorch 中维度(Dimension)概念的理解

    pytorch 中维度(Dimension)概念的理解 Dimension为0(即维度为0时) 维度为0时,即tensor(张量)为标量.例如:神经网络中损失函数的值即为标量. 接下来我们创建一个di ...

  6. MVC与模板概念的理解

    MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一 ...

  7. (图形学相关数学知识)-2.对基本概念的理解(一)

    总览 总结一些在图形学中经常用到的线性代数基本概念. 主要涉及: 标量, 向量, 位置, 方向, 坐标, 矩阵, 线性变换, 线性相关, 平移, 旋转, 缩放, 仿射变换, 齐次坐标等. 标量(数字) ...

  8. 开环与闭环概念的理解

    开环与闭环概念的理解 开环与闭环是自动控制原理里面的概念,在电路设计里面也经常用到,像是运放电路,时钟电路,开关电源电路等.用是用到了,但是真的要你针对这两个概念讲出个ABCD时就.... 1 开环系 ...

  9. 数学是一门逻辑性极强的演绎科学,只有对基本概念深入理解,对基本定理和公式牢牢记住,才能找到解题的突破口和切入点。

    考研数学备考目前已进入首轮复习阶段.此阶段考生要做的是全面整理基本概念.定理.公式,初步总结复习重点,把握命题基本题型,为强化期的复习打下坚实基础. 由于数学大纲一般变化不大,因此,虽然2003年考试 ...

最新文章

  1. 查看网站上保存的密码
  2. ie8不兼容java项目_[Java教程]ie8以下不兼容document.getElementsByName解决方法
  3. Android 计算布局背景的透明度
  4. Java培训教程之使用Lock取代synchronized
  5. WSAAccept()函数使用解析
  6. Linux桌面环境GNOME实用技巧
  7. lodash 数组裁剪 drop
  8. 基于Java毕业设计智慧后勤系统源码+系统+mysql+lw文档+部署软件
  9. nfc加密卡pm3和pm5区别_【黑科技】NFC模拟门卡门禁
  10. Unity用代码将多张图片合并为一张图片
  11. blk_rq_map_user和blk_rq_map_kern
  12. chrome 打开网页速度很慢的可能原因
  13. wox开机自启_Wox具有一切支持的Windows启动器
  14. 五面阿里拿下飞猪事业部offer,统统给你解决!
  15. springCloud Alibaba seata 分布式事务
  16. CS 144 计算机网络
  17. 他为何放弃工程局工作,也要转行学python,还拿下17.5K的offer
  18. 如何加载 那个大图片
  19. ERP期末复习知识点
  20. c语言米粒数实验报告,数字图像处理实验报告米粒.doc

热门文章

  1. 全国降雨侵蚀力因子R值计算教程
  2. docker学习:docker部署dolphinscheduler1.3.9伪分布式集群
  3. uni-app H5下载到本地照片
  4. 整理收集46个常用区块链术语,菜鸟必看!
  5. 一根绳子从一头烧需30时分钟_如何用两根燃烧的绳子测量出45分钟时间?
  6. 反向输出dna序列_biopython 处理dna序列,翻译,反向互补。
  7. ctf 选择题 题库_计算机考试试题(精选)ctf
  8. NSLog 打印技巧
  9. 数据库系统概论学习笔记
  10. 软路由系统 --- OpenWrt网络配置(LAN口、WAN口)